我如何不让用户使用django-rest-framework来修改其他用户的数据

问题描述

我正在使用django-rest-framework和通用视图来构建用于简单博客应用程序的API。 我正在使用RetrieveUpdateAPIView更新数据。 认情况下,如果我有一个用户1发布的帖子,则用户2可以发送POST请求并能够修改该帖子的数据。我不希望这种情况发生。这是我尝试过的:

class PostUpdateAPIView(RetrieveUpdateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

    def perform_update(self,serializer):
        if self.request.user == self.request.POST.get('user'):
            serializer.save(user=self.request.user)

但这不起作用。它不允许其他用户更新帖子,但也不允许同一用户更新帖子。我是一个完整的初学者,所以我还真的不知道如何正确查询。我该怎么做才能使这项工作成功?

解决方法

首先,如果用户1创建一个对象,而用户2要更改与用户1相关的对象的内容,则称为PULL请求而不是POST。因此,如果您想限制用户更改彼此的内容,则可以在“ PostSerializer”中覆盖update()方法。 您可以这样做:

    def update(self,instance,validated_data):
       user_id = self.request.user_id 
       if instance.user_id != user_id:
             # Raise any exceptions