Проверка пользователя по запросу на обновление в Django REST framework - PullRequest
0 голосов
/ 09 марта 2019

Я хочу иметь API, где пользователь может обновлять свои списки.В настоящее время любой зарегистрированный пользователь может обновить любой список, который я нашел, используя Postman.Я хочу проверить пользователя, чтобы API возвращал ошибку в качестве ответа, если пользователь не пытается обновить свой собственный список.Вот мой код:

# serializers.py

class ListingSerializer(serializers.ModelSerializer):
class Meta:
    model = Listing
    fields = '__all__'

# api.py

class ListingViewSet(ModelViewSet):
    permission_classes = [IsAuthenticatedOrReadOnly]
    serializer_class = ListingSerializer

    def get_queryset(self):
        return Listing.objects.all()

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

# urls.py

router = routers.DefaultRouter()

router.register('api/listings', ListingViewSet, 'listings')

urlpatterns = router.urls

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вам просто нужно переписать функцию perform_update:

def perform_update(self, serializer):
    obj = self.get_object()
    if self.request.user != obj.created_by:  # Or how ever you validate
        raise PermissionDenied('User is not allowed to modify listing')

    serializer.save()

Вам понадобится:

from django.core.exceptions import PermissionDenied
0 голосов
/ 10 марта 2019

Вы можете ограничить объект для всех методов изменения основного набора запросов.В этом случае, если неуместный пользователь пытается получить доступ к недопустимому объекту, API возвращает 404.

 def get_queryset(self):
    return Listing.objects.filter(owner=self.request.user)
...