任何人都可以通过 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 错误。
嗨,我正在开发 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 错误。