django错误 Reason given for failure: CSRF cookie not set

作者: u013212391
发布时间:2015-07-29 11:33:09

错误标题:CSRF verification failed. Request aborted.

错误描述:

Help

Reason given for failure:

    CSRF cookie not set.
    

In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:

    * The view function uses RequestContext for the template, instead of Context.
    * In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
    * If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.

You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.

You can customize this page using the CSRF_FAILURE_VIEW setting.

译:

CSRF的验证失败。 请求中止。

失败原因的帮助:CSRF的cookie未设置。一般而言,这个失败发生时,有一个跨站的伪造请求,

或Django的CSRF的机制没有正确使用。
对于POST表单,您需要确保:
*该视图功能使用RequestContext包,而不是Context。
*在模板中,有{%csrf_token%}(template网址tag在每个POST形式的内部。)
*如果您不使用CsrfViewMiddleware,那么你必须在任何使用csrf_token模板标记的视图中使用数据csrf_protect来接收POST数据
您看到此页面的帮助部分,因为你的Django调试=True。 改变这种状况为False,只显示基础的错误信息
您可以自定义此页面使用CSRF_FAILURE_VIEW设置

简而言之,Django防止伪造请求会使用csrf进行token判断。

解决办法:

首先在settings的MIDDLEWARE_CLASSES增加配置:

'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware' #没找到这个文件

在表单中加入{% csrf_token %},并在views中对模板渲染:

from django.shortcuts import render_to_response
from django.core.context_processors import csrf

def index(request):
c={}
c.update(csrf(request))
return render_to_response('index.html',c)

然后就可以了~

版权声明:本文为博主原创文章,未经博主允许不得转载。

标签: Cookie Django Go
来源:http://blog.csdn.net/u013212391/article/details/41435407

推荐: