내 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
통화 실제로 일부 데이터로 채워져 있습니다. 토큰이 올바른지 확인하는 방법을 잘 모르겠지만 무언가를 찾아서 보내는 것이 좋습니다.
그러나 장고는 여전히 내 AJAX 게시물을 거부하고 있습니다.
내 JavaScript는 다음과 같습니다.
$.post("/memorize/", data, function (result) {
if (result != "failure") {
get_random_card();
}
else {
alert("Failed to save card data.");
}
});
장고에서 내가 본 오류는 다음과 같습니다.
[23 / Feb / 2011 22:08:29] "POST / 암기 /HTTP/1.1"403 2332
나는 무언가를 놓치고 있다고 확신하며, 아마도 간단하지만 그것이 무엇인지 모르겠습니다. 나는 SO를 둘러보고 csrf_exempt
데코레이터 를 통해 내보기에 대한 CSRF 검사를 끄는 것에 대한 정보를 보았지만 그다지 매력적이지 않다는 것을 알았습니다. 나는 그것을 시도해 보았지만 효과가 있지만 가능한 경우 장고가 그것을 예상하도록 설계된 방식으로 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))
답장을 보내 주셔서 감사합니다!