Django 任何人都可以删除或更新其他';s通过url发布的帖子

Django 任何人都可以删除或更新其他';s通过url发布的帖子,django,django-models,django-authentication,django-permissions,Django,Django Models,Django Authentication,Django Permissions,我正在开发一个Django博客应用程序。在这个应用程序中,我有一个PostEdit视图来编辑帖子,删除帖子视图来删除帖子。这些操作只能由创建该帖子的用户执行。我使用Delete视图作为功能视图,使用edit视图作为CBV。现在的情况是,任何用户都可以通过URL删除或编辑其他帖子。在我的delete post视图中,因为它是基于函数的视图,所以我使用if条件来防止其他用户删除其他人的帖子。但由于我使用CBV进行后期编辑,我无法找到阻止用户编辑其他人的帖子的方法 那么,我如何防止其他用户编辑其他人的

我正在开发一个Django博客应用程序。在这个应用程序中,我有一个PostEdit视图来编辑帖子,删除帖子视图来删除帖子。这些操作只能由创建该帖子的用户执行。我使用Delete视图作为功能视图,使用edit视图作为CBV。现在的情况是,任何用户都可以通过URL删除或编辑其他帖子。在我的delete post视图中,因为它是基于函数的视图,所以我使用if条件来防止其他用户删除其他人的帖子。但由于我使用CBV进行后期编辑,我无法找到阻止用户编辑其他人的帖子的方法

那么,我如何防止其他用户编辑其他人的帖子呢


类PostUpdateView(LoginRequiredMixin,UpdateView):
型号=员额
模板名称='blog/post\u form.html'
form_class=PostForm
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
上下文['title']='Update'
返回上下文
def表单_有效(自身、表单):
form.instance.author=self.request.user
form.save()
返回super().form_有效(form)
@需要登录
def post_删除(请求,slug):
post=获取对象或404(post,slug=slug)
如果(request.user==post.author):
post.delete()
返回重定向('blog:post_list')
其他:
返回重定向('blog:post_detail',slug=slug)

您可以通过覆盖来过滤登录用户上的查询集,如:

class PostUpdateView(LoginRequiredMixin,UpdateView):
型号=员额
模板名称='blog/post\u form.html'
form_class=PostForm
def get_queryset(自我):
return super().get_queryset().filter(author=self.request.user)
#…

如果用户打算编辑他/她不是作者的
帖子
。视图将引发404错误。

此操作有效。另外,我希望您注意它应该是
self.request.user
,而不是
request.user
。另外,我想问一下,在基于函数的视图中,是否有其他方法代替if条件来实现此目的。
class PostUpdateView(LoginRequiredMixin ,UpdateView):
    model = Post
    template_name = 'blog/post_form.html'
    form_class = PostForm

    def get_queryset(self):
        return super().get_queryset().filter(author=self.request.user)

    # ...