任何人都可以通过 url 删除或更新其他人的 post

Anyone is able to delete or update other's post through url

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

那么我怎样才能防止让另一个用户编辑其他人post?


class PostUpdateView(LoginRequiredMixin ,UpdateView):
    model = Post
    template_name = 'blog/post_form.html'
    form_class = PostForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Update'
        return context

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.save()
        return super().form_valid(form)


@login_required
def post_delete(request, slug):
    post = get_object_or_404(Post, slug=slug)
    if (request.user == post.author):
        post.delete()
        return redirect('blog:post_list')
    else:
        return redirect('blog:post_detail', slug=slug)

您可以通过覆盖 get_queryset method [Django-doc] 来过滤登录用户的查询集,例如:

class PostUpdateView(LoginRequiredMixin ,UpdateView):
    model = Post
    template_name = 'blog/post_form.html'
    form_class = PostForm

    def <b>get_queryset</b>(self):
        return super().get_queryset()<b>.filter(author=self.request.user)</b>

    # ...

如果用户打算编辑 Post 其中 he/she 是 不是 作者。该视图将引发 404 错误。