[英]csrf with ajax and django post
使用jquery1.7.1和django1.3,我試圖通過ajax發布一個post請求,在我在web上找到的一些教程代碼中
$(document).ready(function(){
$("#create").click(create_note);
});
var create_note = function() {
var title = $("#title").val()
var slug = $("#slug").val()
if (title != "" && slug != "") {
var data = { title:title, slug:slug };
console.log('title='+title);
console.log('slug='+slug);
var args = { type:"POST", url:"/create/", data:data, complete:done };
$.ajax(args);
}
else {
// display failure
}
return false;
};
url“/ create /”映射到django視圖
(r'^create/$','notes.views.create_note'),
def create_note(request):
error_msg = u"No POST data sent."
if request.method == "POST":
post = request.POST.copy()
if post.has_key('slug') and post.has_key('title'):
slug = post['slug']
if Note.objects.filter(slug=slug).count() > 0:
error_msg = u"Slug already in use."
else:
title = post['title']
new_note = Note.objects.create(title=title,slug=slug)
return HttpResponseRedirect(new_note.get_absolute_url())
else:
error_msg = u"Insufficient POST data (need 'slug' and 'title'!)"
return HttpResponseServerError(error_msg)
當我單擊提交按鈕,觸發javascript函數create_note
,我收到403錯誤。 必須是csrf問題..
我試圖通過修改就緒功能來解決這個問題
$(document).ready(function(){
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
$("#create").click(create_note);
});
但它沒有用..我仍然得到403 error
所以,我試圖修改ajax
調用中的數據
var create_note = function() {
var data = { title:title, slug:slug ,csrfmiddlewaretoken: '{{ csrf_token }}'};
...
var args = { type:"POST", url:"/create/", data:data, complete:done };
$.ajax(args);
};
仍然會導致403錯誤..
請告訴我應該怎么做才能糾正這個..我看到了關於這個的django文檔 ,但我很困惑如何使用它。我應該復制整個jQuery(document).ajaxSend(...
代碼到我的javascript文件..我真的很困惑..
你需要( 作為你建議鏈接的文件 )復制整個ajaxSend
方法......
你不需要以任何方式修改它 - 它是一個完整的解決方案 - ajaxSend
方法實際上是ajaxSend
事件的事件處理程序。 它在jQuery中使用.ajax
方法時觸發。 請在此處查看ajaxSend文檔
上述文檔中鏈接的方法會將正確的X-CSRFToken
標頭附加到您的AJAX請求中。 然后,您可以使用第一種方法發送AJAX請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.