Django在以post的方式提交表单时报错CSRF verification failed. Request aborted的解决办法

Posted E-goal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django在以post的方式提交表单时报错CSRF verification failed. Request aborted的解决办法相关的知识,希望对你有一定的参考价值。

Django在以post的方式提交表单时会出现:

 解决方法一(不建议):

屏蔽CSRF

在settings.py文件中将\'django.middleware.csrf.CsrfViewMiddleware\'注释掉即可

MIDDLEWARE = [
    \'django.middleware.security.SecurityMiddleware\',
    \'django.contrib.sessions.middleware.SessionMiddleware\',
    \'django.middleware.common.CommonMiddleware\',
    #\'django.middleware.csrf.CsrfViewMiddleware\',
    \'django.contrib.auth.middleware.AuthenticationMiddleware\',
    \'django.contrib.messages.middleware.MessageMiddleware\',
    \'django.middleware.clickjacking.XFrameOptionsMiddleware\',
]

 解决方法二(建议):

在表单下面添加 {% csrf_token %}

<form action="{% url \'reg\' %}" method="post">
    姓名<input type="text" name="username"><br>
    密码<input type="text" name="psw"><br>
    <input type="submit">
    {% csrf_token %}
</form> 

即可成功提交

这其实是Django提供一个防止跨站攻击的安全机制,看一下浏览器解析的源码

<form action="/blog/register/" method="post">
    姓名<input type="text" name="username"><br>
    密码<input type="text" name="psw"><br>
    <input type="submit">
    <input type=\'hidden\' name=\'csrfmiddlewaretoken\' value=\'0b0Q83GPpMZMYkSWCKPGnYmRpSkwWUv11gPIPHdyGvSpbQIjJiIzBPeH1AYLBXPT\' />
</form>

多了一个隐藏的input标签,当在浏览器向django服务端发送get请求时,django会额外响应一对密钥,可以看作由它生成{% csrf_token %},当以post的方式提交表单时,django会检查密钥,因为没写{% csrf_token %},导致没有密钥,所以会报错

 

以上是关于Django在以post的方式提交表单时报错CSRF verification failed. Request aborted的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

django1.11如何用post方法提交表单

Django 表单未使用 Javascript 提交

跪求!!!用jsoup提交表单时报错 HTTP error fetching URL,Status=405

django在页面POST无响应

Laravel用post提交表单常见的两个错误

POST表单提交后django显示消息