Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django | CSRF验证失败_Python_Django_Django Csrf - Fatal编程技术网

Python Django | CSRF验证失败

Python 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)

我正在构建一个类似Django的博客应用程序,用于实践和学习。我正在建立一个表单,让用户在帖子上留下评论。我有一个接受用户外键的Post模型,还有一个接受用户外键和Post外键的评论模型(用于标识与评论相关联的帖子)

我知道我的安装方式还不能正常工作,但我只是想调试一个CSRF问题。这是我的密码:

models.py

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>