Python Django | CSRF验证失败
我正在构建一个类似Django的博客应用程序,用于实践和学习。我正在建立一个表单,让用户在帖子上留下评论。我有一个接受用户外键的Post模型,还有一个接受用户外键和Post外键的评论模型(用于标识与评论相关联的帖子) 我知道我的安装方式还不能正常工作,但我只是想调试一个CSRF问题。这是我的密码: models.pyPython Django | CSRF验证失败,python,django,django-csrf,Python,Django,Django Csrf,我正在构建一个类似Django的博客应用程序,用于实践和学习。我正在建立一个表单,让用户在帖子上留下评论。我有一个接受用户外键的Post模型,还有一个接受用户外键和Post外键的评论模型(用于标识与评论相关联的帖子) 我知道我的安装方式还不能正常工作,但我只是想调试一个CSRF问题。这是我的密码: models.py class Comment(models.Model): date_posted = models.DateTimeField(default=timezone.now)
class Comment(models.Model):
date_posted = models.DateTimeField(default=timezone.now)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
views.py
@login_required
def post_detail(request, post_id):
if request.method == 'POST':
print("posted")
return redirect('Home')
else:
comment_form = CommentForm()
context = {
'post': Post.objects.get(id=post_id),
'comments': Comment.objects.order_by('date_posted'),
'comment_form': comment_form
}
return render(request, 'feed/postdetail.html', context)
模板“postdail.html”
我不断收到一个错误,说明“CSRF验证失败。请求中止”,原因是“CSRF令牌丢失或不正确”。只有在单击post按钮时才会发生这种情况
我只是在学习Django,我做错了什么?您需要更改html表单并像这样添加CSRF验证
<form method="POST" enctype="text/plain">
{% csrf_token %}
<div class=comment-line>
{% csrf_token %}
{{ comment_form }}
<button type="submit">Post</button>
</div>
</form>
{%csrf_令牌%}
{%csrf_令牌%}
{{comment_form}}
邮递
我添加了这个{%csrf_token%}以便在您的模板中有卡令牌我发现问题在于我的表单标签中的“enctype”。删除此选项可以解决问题。我尝试了此选项,但似乎仍然无法解决问题。但是,它修复了它,只是为了从表单标记中删除“enctype”。非常感谢。快乐编码^_^
'django.middleware.csrf.CsrfViewMiddleware',
<form method="POST" enctype="text/plain">
{% csrf_token %}
<div class=comment-line>
{% csrf_token %}
{{ comment_form }}
<button type="submit">Post</button>
</div>
</form>