嘿,我正在开发Django Blog应用程序。在此应用程序中,我具有PostEdit视图来编辑帖子,而Delete Delete视图则可以删除帖子。这些操作只能由创建该帖子的用户执行。我使用了删除视图作为功能视图,并使用了CBV编辑视图。现在发生的事情是,任何用户都可以通过URL删除或编辑其他用户。在我的删除帖子视图中,由于它是基于功能的视图,因此我使用if条件阻止另一个用户阻止删除其他人的帖子。但是由于要进行帖子编辑,所以我使用的是CBV,因此无法找到阻止用户编辑他人帖子的方法。
那么如何防止其他用户编辑其他人的帖子?
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)
答案 0 :(得分:1)
您可以通过覆盖get_queryset
method [Django-doc]来过滤登录用户的查询集,例如:
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)
# ...
如果用户打算编辑自己不是作者的Post
,则为 。该视图将引发404错误。