0

私はdjangoを初めて使用し、チェックボックス/テキストボックスと送信ボタンを備えたmethod:GETフォームを作成しました。これをmethod:POSTフォームに変更したいのですが、次のようなエラーが発生し続けます。

失敗の理由:

CSRFトークンが見つからないか正しくありません。

一般に、これは、本物のクロスサイトリクエストフォージェリがある場合、またはDjangoのCSRFメカニズムが正しく使用されていない場合に発生する可能性があります。POSTフォームの場合、次のことを確認する必要があります。

お使いのブラウザはCookieを受け入れています。

ビュー関数は、ContextではなくRequestContextをテンプレートに使用します。

テンプレートでは、内部URLをターゲットとする各POSTフォーム内に{%csrf_token%}テンプレートタグがあります。

CsrfViewMiddlewareを使用していない場合は、csrf_tokenテンプレートタグを使用するすべてのビュー、およびPOSTデータを受け入れるビューでcsrf_protectを使用する必要があります。

デバッガーが指示するすべてのことを変更しようとしましたが、同じエラーが発生し続けます。ここに含まれているviews.py、テンプレートファイル(.html)、settings.pyファイル以外に変更する必要のあるファイルがあるかどうかを知りたいです。

views.py:

from django.template import RequestContext, loader
from crunchApp.models import Filter
from django.http import HttpResponse
from django.core.context_processors import csrf
from django.shortcuts import render_to_response, get_object_or_404
from django.http import Http404    

def results(request):

    c = {}
    c.update(csrf(request))
    return render_to_response('crunchApp/results.html', c)

template / test.html

    <form name="myform" action="results" method = "post" >{% csrf_token %}
        <fieldset>
            <input type="checkbox" value="total_money" id = "money_check" name="check" /> Filter by Total Money</br>
    </fieldset></form>

settings.py

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
4

1 に答える 1

0

あなたは必要ないはずです

c = {}
c.update(csrf(request))

ただし、次のように、context_instance = RequestContext(request)が必要です。

render_to_response(<template>, <vars>, context_instance=RequestContext(request))
于 2012-08-28T23:45:44.500 に答える