【发布时间】:2014-09-28 17:40:01
【问题描述】:
我正在用 Django 做一个简单的 bbs。
目前,我正在尝试在前端删除帖子。
这是我在views.py中的代码
@login_required
def delete_post(request, id):
post_to_delete = get_object_or_404(Post, pk=id)
if post_to_delete.owner_user != request.user:
return HttpResponseForbidden()
if request.method == 'POST':
form = DeletePostForm(request.POST, instance=post_to_delete)
if form.is_valid():
post_to_delete.delete()
return HttpResponseRedirect('/')
else:
form = DeletePostForm(instance=post_to_delete)
return render(request,'delete_post.html', {'form':form})
我相信我正确使用了 .delete() 函数,当我单击删除按钮时,我被带到 delete_post.html 但是当我返回查看管理员中的帖子列表时,帖子仍然存在..
【问题讨论】:
-
您需要检查您对 form.is_valid() 的调用是否返回 True。如果您不知道,您可以使用 form.errors 看到错误,而且我不知道您为什么使用 Form 执行删除,只需将帖子 ID 传递给视图并获取它,您就可以删除它。跨度>
-
stackoverflow.com/a/13644671我在这里看到了..它告诉我使用表单来避免csrf攻击。
-
你不需要使用表单来避免csrf攻击,因为Django会为你处理它,你可以查看它是如何工作的:docs.djangoproject.com/en/dev/ref/contrib/csrf/…
-
只是为了确保,如果我在我的 def delete_post 之上添加@csrf_protect,我将获得自动 csrf 保护?