#python #django #django-rest-framework
#python #django #django-rest-framework
Вопрос:
Я создаю пользовательское разрешение Django Rest Framework для одного из моих представлений, я хочу, чтобы администраторы и владелец объекта могли просматривать и редактировать объект, для всех остальных возвращать ошибку исключения. Но я не могу получить свое пользовательское разрешение на возврат ошибки, если request.user не является администратором или владельцем объекта.
В настоящее время у меня в моем view.py
class ItemQuery(generics.RetrieveUpdateDestroyAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
permission_classes = [IsOwnerOrReadOnly]
lookup_field = 'name'
и мой permissions.py
from rest_framework.views import exception_handler
class IsOwnerOrReadOnly(permissions.basePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
if obj.id.user = request.user or request.user.is_admin == True:
return True
else:
return False
response = exception-handler(self, request)
response.status_code = 404
return response
Комментарии:
1. удалите последние строки, поскольку они никогда не выполняются после оператора return False . Кроме того, класс разрешений должен возвращать только true или false, а не HTTP-ответ. Это делается с помощью представления. Можете ли вы показать ответ, который вы получаете после отправки запроса от имени другого пользователя, который не является владельцем? Из вашего кода он должен нормально работать для POST и других небезопасных методов
Ответ №1:
Удалить
if request.method in permissions.SAFE_METHODS:
return True
он возвращается до того, как вы проверите, является ли владелец или администратор.