私のAJAX投稿を介して、DjangoのCSRF保護メカニズムに準拠するためにいくつかの助けを借りることができました。私はここの指示に従いました:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
そのページにあるAJAXサンプルコードを正確にコピーしました。
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
呼び出しのgetCookie('csrftoken')
前の内容を印刷するアラートを配置し、xhr.setRequestHeader
実際にいくつかのデータが入力されています。トークンが正しいことを確認する方法はわかりませんが、何かを見つけて送信することをお勧めします。
しかし、Djangoは私のAJAX投稿をまだ拒否しています。
これが私のJavaScriptです。
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
Djangoからのエラーは次のとおりです。
[23 / Feb / 2011 22:08:29] "POST / memorize / HTTP / 1.1" 403 2332
私は何かが欠けていると確信しています、そしておそらくそれは単純ですが、それが何であるかわかりません。私はSOの周りを検索して、csrf_exempt
デコレータを介して私のビューのCSRFチェックをオフにすることに関するいくつかの情報を見ましたが、それは魅力的ではありません。私はそれを試してみましたが機能しますが、可能であれば、Djangoがそれを期待するように設計された方法でPOSTを機能させたいと思います。
参考までに、私の見解の要点を以下に示します。
def myview(request):
profile = request.user.profile
if request.method == 'POST':
"""
Process the post...
"""
return HttpResponseRedirect('/memorize/')
else: # request.method == 'GET'
ajax = request.GET.has_key('ajax')
"""
Some irrelevent code...
"""
if ajax:
response = HttpResponse()
profile.get_stack_json(response)
return response
else:
"""
Get data to send along with the content of the page.
"""
return render_to_response('memorize/memorize.html',
""" My data """
context_instance=RequestContext(request))
お返事ありがとうございます!