Django REST Framework — возвращает ошибку, если не разрешено просматривать объект, который не работает?

#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
 

он возвращается до того, как вы проверите, является ли владелец или администратор.