zoukankan      html  css  js  c++  java
  • CSRF verification failed. Request aborted.

    在使用Django提交Post表单时遇到如下错误:

    1. Forbidden (403)  
    2. CSRF verification failed. Request aborted.  


    原因在"帮助"中已经写的很清楚了。

    一般而言,这可以发生时,有一个真正的跨站请求伪造,或当Django的CSRF的机制还没有正确使用。 对于POST表单,您需要确保:

    *该视图功能使用模板RequestContext的。

    *在模板中,有{%csrf_token%}(模板网址标记在每个邮局形式的内部目标。

    *如果您不使用CsrfViewMiddleware,那么你必须在view中使用csrf_protect,

    您看到此页面的帮助部分,因为你在settings中设置了 DEBUG = True。 改变这种状况为False,只有最初的错误信息会被显示。您可以使用CSRF_FAILURE_VIEW设置自定义此页面。

    所以,解决方法:

    1、在表单Form里加上{% csrf_token %}

    2、在Settings里的MIDDLEWARE_CLASSES增加配置:(一般默认就有)

    'django.middleware.csrf.CsrfViewMiddleware',

    #'django.middleware.csrf.CsrfResponseMiddleware',

    1.2.X示例:

    1. MIDDLEWARE_CLASSES = (  
    2.     'django.middleware.common.CommonMiddleware',  
    3.     'django.contrib.sessions.middleware.SessionMiddleware',  
    4.     'django.middleware.csrf.CsrfViewMiddleware',  
    5.     'django.middleware.csrf.CsrfResponseMiddleware',  
    6.     'django.contrib.auth.middleware.AuthenticationMiddleware',  
    7.     'django.contrib.messages.middleware.MessageMiddleware',  
    8. )  

    3、在view中的方法上面加上@csrf_protect注解。同时使用RequestContext代替Context。示例:

    ----------------------------------------------------------------------------------------------------------------------------------

    @csrf_protect    
    def login(request):

    ...

    return render_to_response('index.html',context_instance=RequestContext(request))

    ----------------------------------------------------------------------------------------------------------------------------------

    详情: 

    https://docs.djangoproject.com/en/1.2/ref/contrib/csrf/

    https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf


    扩展阅读:

    django.contrib.csrf 开发包只有一个模块: middleware.py 。该模块包含了一个 Django 中间件类——CsrfMiddleware ,该类实现了 CSRF 防护功能。

     
     

    在设置文件中将 'django.contrib.csrf.middleware.CsrfMiddleware' 添加到 MIDDLEWARE_CLASSES 设置中可激活 CSRF 防护。 该中间件必须在 SessionMiddleware 之后 执行,因此在列表中 CsrfMiddleware 必须出现在SessionMiddleware 之前 (因为响应中间件是自后向前执行的)。 同时,它也必须在响应被压缩或解压之前对响应结果进行处理,因此 CsrfMiddleware 必须在 GZipMiddleware 之后执行。一旦将它添加到MIDDLEWARE_CLASSES设置中,你就完成了工作。

  • 相关阅读:
    下一代的前端构建工具:parcel打包react
    vue or react mvvm里的文字上下滚动
    CSS grid layout demo 网格布局实例
    js页面可视区域懒加载
    Vue双向绑定简单实现
    React Router 4.0中文快速入门
    Array.isArray() 和 isObject() 原生js实现
    60分钟课程: 用egg.js实现增删改查,文件上传和restfulApi, webpack react es6 (一)
    mirror.js 整合redux的好工具
    React-redux及异步获取数据20分钟快速入门
  • 原文地址:https://www.cnblogs.com/Dennis-mi/p/5565934.html
Copyright © 2011-2022 走看看