CSRF verification failed. Request aborted.
Reason given for failure:
CSRF token missing or incorrect.
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:
RequestContext
for the template, instead of Context
.{% csrf_token %}
template tag inside each POST form that targets an internal URL.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.
解决办法:
在django1.4里,就必须按照提示的步骤来:
1,在view里面,强制使用RequestContext 代替
Context。示例如下:
from django.template import RequestContext
视图返回要这样:
return render_to_response('index.html', {
'param1': 'aaa',
'param2': 'bbb',
},
context_instance=RequestContext(request) # here!
)
2,在模板的form体里面,加入 {% csrf_token %}
,示例如下:
……
</form>
-------------------
注意,在Django 1.2(含1.2) 之前,解决办法是
在settings的中间件设置里MIDDLEWARE_CLASSES加入:
'django.middleware.csrf.CsrfResponseMiddleware',