我在使用我的形式POST即使我已經加了csrf_token到我的形式得到一個錯誤....Django的POST請求無
錯誤
禁止(403)
CSRF驗證失敗。請求中止。對未給予
幫助
原因: CSRF的cookie未設置。
一般而言,如果存在真正的跨站點請求僞造,或者Django的CSRF機制未正確使用,則可能發生這種情況。對於POST表單,您需要確保: •您的瀏覽器正在接受cookie。 •視圖函數使用RequestContext作爲模板,而不是Context。 •在模板中,每個POST表單內都有一個{%csrf_token%}模板標籤,用於定位內部URL。 •如果您未使用CsrfViewMiddleware,則必須在使用csrf_token模板標籤的任何視圖以及接受POST數據的視圖上使用csrf_protect。
由於您的Django設置文件中有DEBUG = True,因此您會看到本頁的幫助部分。將其更改爲False,並且只顯示最初的錯誤消息。
您可以使用CSRF_FAILURE_VIEW設置來自定義此頁面。
views.py
def search_form(request):
return render_to_response('search_form.html')
def search(request):
print 'request.post=', request.POST
print 'request.get=', request.GET
print 'request.method=', request.META.get('REQUEST_METHOD')
if 'q' in request.GET:
message = 'You searched for :%r' % request.GET['q']
else:
message = 'You submitted an empty form'
return HttpResponse(message)
search-form.html
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="/polls/search/" method="post">{% csrf_token %}
<input type="text" name="q">
<input type="submit" value="Search">
</form>
</body>
</html>
urls.py
urlpatterns = patterns('',url(r'^$',views.index,name='index'),
url(r'^meta/',views.display_meta,name='meta'),
url(r'^search-form/$',views.search_form),
url(r'^search/',views.search),