8

Django 1.2では、POSTフォームを実行すると、このCSRF検証エラーが常に発生します。私は、Django1.2ドキュメントで求められているすべてのことを実行したと「思います」。

  1. MIDDLEWARE_CLASSESが「django.middleware.csrf.CsrfViewMiddleware」に含まれていることを確認します

  2. {%csrf_token%}を確認します

    <form action="/words/new/" method="post">
    {% csrf_token %}
    {{ form.as_p }}
        <input type="submit" value="Enter" />
    </form>
    
  3. 私の応答でRequestContextを使用してください

    def create(request):
        if request.method == 'POST':
            form = DefinitionForm(request.POST)
            if form.is_valid():
                form.save()
            c = {}
            return render_to_response('dict/thanks.html',c, 
                                        context_instance=RequestContext(request))
        else:
            form = DefinitionForm()
        return render_to_response('dict/create_definition.html', {
            'form' : form,
        })
    

GETアクションはこの関数で機能することに注意してください。だから私はrender_to_responseを正しく使っていると思います。

@csrf_protectデコレータを挿入しようとしましたが、それでも機能しなかったようです。私はアイデアがなく、ラップトップで自分を窒息させようとしています。

皆さんが思いつくことはありますか?

ありがとう!

4

1 に答える 1

7

あなたは#3をフォローしていません。フォームを表示するテンプレートのRequestContextレンダリングで使用する必要があります。感謝のページには必要ありません。

return render_to_response('dict/create_definition.html', {
    'form' : form,
}, context_instance=RequestContext(request))

また、補足として、感謝のページを直接レンダリングするのではなく、 PRGパターンを使用する必要があります。

于 2011-01-23T17:09:11.923 に答える