CSRF verification failed. Request aborted.
2400 ワード
djangoを使用してformフォームをコミットする場合、コミット方式はpostで、常にコミットに成功しません.エラーは以下の通りです.
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
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: Your browser is accepting cookies. The view function uses In the template, there is a If you are not using
You're seeing the help section of this page because you have
You can customize this page using the CSRF_FAILURE_VIEW setting.
上記の方法では、
1つ目は、フォームに{%csrf_token%}を加えればいいです.2つ目の方法は、SettingsにあるMIDDLEWARE_CLASSSES追加構成: 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware',
全部つけましたが、何の役にも立たず、ネットで資料を調べてやっと答えが見つかりました.viewからページまで、私は味噌紫です.
まずrequestはpostメソッドがなくelseに入りcontact_と表示されますform.htmlページ、この時点でエラーを報告し、ネット上でRequestContextオブジェクトを使用しなければならないという説があります.
elseの文をRequestContextに追加しました.成功しました.
Forbidden (403)
CSRF verification failed. Request aborted.
Help
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.
上記の方法では、
1つ目は、フォームに{%csrf_token%}を加えればいいです.2つ目の方法は、SettingsにあるMIDDLEWARE_CLASSSES追加構成: 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware',
全部つけましたが、何の役にも立たず、ネットで資料を調べてやっと答えが見つかりました.viewからページまで、私は味噌紫です.
from django.shortcuts import *
from contact.forms import ContactForm
def contact(request):
if request.method=='POST':
form= ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('email', '[email protected]'),
['[email protected]'],
)
return HttpResponseRedirect('/contact/thanks/')
else:
form=ContactForm()
return render_to_response('contact_form.html', {'form': form})
まずrequestはpostメソッドがなくelseに入りcontact_と表示されますform.htmlページ、この時点でエラーを報告し、ネット上でRequestContextオブジェクトを使用しなければならないという説があります.
return render_to_response('contact_form.html', {'form': form},context_instance=RequestContext(request))
elseの文をRequestContextに追加しました.成功しました.