簡體   English   中英

在Django REST框架中根據更新請求驗證用戶

[英]Validate user on update request in Django REST framework

我想擁有一個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

您只需要覆蓋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

您可以限制對象的所有方法更改主查詢集。 在這種情況下,如果不適當的用戶嘗試訪問無效的對象,則api返回404。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM