我如何不让用户使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...