CSRF verification failed. Request aborted.


djangoを使用してformフォームをコミットする場合、コミット方式はpostで、常にコミットに成功しません.エラーは以下の通りです.
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:
  • Your browser is accepting cookies.
  • 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.
    上記の方法では、
    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に追加しました.成功しました.