首页 > 解决方案 > 我如何不让用户能够使用 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)

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

标签: djangodjango-rest-frameworkdjango-users

解决方案


首先,如果用户 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

推荐阅读