CSRF保護を行うには、POSTメソッドを使用するフォームが必要ですか?私は本をフォローしていますが、コード例は403エラーをスローします。検索を行ったところ、すべてのフォームでCSRFを有効にする必要があるようです。
私の質問は次のとおりです。
Djangoでは、すべてのPOSTフォームをCSRFから保護する必要がありますか?
これを実現するために必要なのは、「django.middleware.csrf.CsrfViewMiddleware」を追加し、render_to_response(template、dictionary、context_instance = RequestContext(request)を返し、対応するフォームに「{%csrf_token%}」を追加することだけですか?ここに何かが足りませんか?
これを行うと、フォームは正常に機能します。これらのピースのいずれかが欠落している場合、403に失敗します。正しく実行していることを確認したいだけです。:)
前もって感謝します。
編集:
何らかの理由で、このコードは私には意味がありませんが、エラーは返されません。まだそれを行うためのより効率的な方法を示している本のセクションに到達していないので、原始的な検証を無視してください。
def contact(request):
errors = []
if request.method == 'POST':
if not request.POST.get('subject',''):
errors.append('Enter a subject')
if not request.POST.get('message',''):
errors.append('Enter a message')
if request.POST.get('email', '') and '@' not in request.POST['email']:
errors.append('Enter a valid email address')
if not errors:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', 'noreply@example.com'), ['siteownder@example.com'],)
return HttpResponseRedirect('/contact/thanks/')
return render_to_response('contact_form.html', { 'errors': errors }, context_instance=RequestContext(request))
私の問題は、このビュー関数の最後の行にあります。request.method!=POSTの場合にのみ呼び出されます。これは私には完全に間違っているようです。POSTを実行しているときに「context_instance=RequestContext(request)」を呼び出すべきではありませんか?