码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-06 10:30:01      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:sub   发送   reg   hid   添加   idt   security   smi   技术分享   

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的解决办法

标签:sub   发送   reg   hid   添加   idt   security   smi   技术分享   

原文地址:https://www.cnblogs.com/sumcet/p/8997001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!