您的位置:首页 > 产品设计 > UI/UE

解决django开发中CSRF verification failed. Request aborted.的问题

2013-04-15 11:46 501 查看
在使用Django提交Post表单时遇到如下错误:

Forbidden (403)  

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示例:

 

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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Django Python CSRF