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设置中,你就完成了工作。

  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/Dennis-mi/p/5565934.html
Copyright © 2011-2022 走看看