zoukankan      html  css  js  c++  java
  • django1.6 CSRF verification failed. Request aborted. 用出现表单提交

    当表单提交的时候出现了这个界面:

    Forbidden (403)

    CSRF verification failed. Request aborted.

    网上有很多解决方式, 大体是三种解决方法,但是我试了下 ,都不能解决我的问题:

    这里列觉下其他3中解决方法:

    1、在表单Form里加上{% csrf_token %}
    
    
    2、在Settings里的MIDDLEWARE_CLASSES增加配置:(一般默认就有)
    'django.middleware.csrf.CsrfViewMiddleware',
     #'django.middleware.csrf.CsrfResponseMiddleware',
    1.2.X示例:
     
    MIDDLEWARE_CLASSES = (  
        'django.middleware.common.CommonMiddleware',  
        'django.contrib.sessions.middleware.SessionMiddleware',  
        'django.middleware.csrf.CsrfViewMiddleware',  
        'django.middleware.csrf.CsrfResponseMiddleware',  
        'django.contrib.auth.middleware.AuthenticationMiddleware',  
        'django.contrib.messages.middleware.MessageMiddleware',  
    )  
    
    
    3、在view中的方法上面加上@csrf_protect注解。同时使用RequestContext代替Context。示例:
    ----------------------------------------------------------------------------------------------------------------------------------
    @csrf_protect    
    def login(request):
    ...
    return
    render_to_response('index.html',context_instance=RequestContext(request))

    我测试了下不符合我出现的问题.

    解决方法的思路:

    1,先知道要添加在form里的这个东西是做什么的

    {% csrf_token %}  :

    什么是CSRF

    问题是解决了,但我不禁回想为什么在Django里提交POST表单要配置那么麻烦(其实也不麻烦,但对新手来说就不一样了),于是搜索关键字看看,得知它是一种跨站请求伪造,黑客可以利用这个攻击站点。而Django里的使用这个机制就是防止CSRF模式攻击,原理大致是当你打开页面的时候产生一个csrftokey种下cookie,然后当你提交表单时会把本地cookie里的csrftokey值给提交服务器,服务器判断只有有效的csrftokey值才处理请求.

    在网上别人可以看到csrftokey的值,但是我用input的解决是空

    2,找csrf_token为空的原因:

    找到了一个关于django中ajax使用时csrf_token为空的例子:

    http://blog.shazhouke.webfactional.com/?tag=django-csrf-jquery-ajax

    3.思考,因自己也没用ajax请求.

    就观察自己的代码:

    发现问题:

    对比:

    @login_required
    def index(request):
        username = request.user.username
        return  render_to_response('index.html',{
            'username':username
        },context_instance=RequestContext(request))
    @login_required
    def index(request):
    
        return  render_to_response('index.html')

    下面这个是错误的.

    还是因为RequestContext这一块的问题

    注意引入的包:    from django.shortcuts import render_to_response,RequestContext

    
    
    
    
    
    
    
    
    
  • 相关阅读:
    常用linux命令及其设置
    shell脚本编写步骤及其常用命令和符号
    浏览器访问php脚本通过sendmail用mail函数发送邮件
    windows server 定期备份数据库脚本
    图片垂直水平居中
    "!function",自执行函数表达式
    jQuery(function(){})与(function(){})(jQuery) 的区别
    在Windows Server 2019通过Docker Compose部署Asp.Net Core
    Redis集群同步问题
    webapi跨域使用session
  • 原文地址:https://www.cnblogs.com/Jghost/p/3592022.html
Copyright © 2011-2022 走看看