django - 我如何不让用户能够使用 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
推荐阅读
- c# - 如何使用 TempData 修复字符串的“可空对象必须有值”
- xaml - 左对齐 UWP Button.Flyout 的内容
- google-places-api - Google Places API 不会返回大城市或中心的邮政编码。我该如何解决?
- html - Django - “fulltext = request.GET['fulltext']”在我添加请求返回渲染 html 后停止工作
- php - 当我在数据库名称中插入数据时,我的代码中有什么问题是 db2 它给了我一个错误列“名称”不能为空
- ruby-on-rails - 编写活动装饰器 DRY
- python-2.7 - 理解代码中的 ast.literal_eval
- guacamole - 如何通过 html5 重播鳄梨酱重播文件
- string - 如何确定 Racket 中的列表是升序、降序还是两者都不是
- angular - 如何使用 Ionic 4 创建手风琴列表?