如何在javascript中使用{%csrf_token%}

如何在javascript中使用{%csrf_token%},javascript,django,jquery,django-forms,django-csrf,Javascript,Django,Jquery,Django Forms,Django Csrf,在我的用户页面中,我使用ajax进行了就地编辑。当我单击“编辑”时,它工作正常。但是当我提交表单时,它什么都不做。当我检查时,这是错误: CSRF验证失败。请求中止。 那么,如何在javascript中放置{%csrf_token%}?请给我一些建议。 多谢各位 edit.js: function bookmark_edit() { var item = $(this).parent(); var url = item.find(".title").attr("href");

在我的用户页面中,我使用ajax进行了就地编辑。当我单击“编辑”时,它工作正常。但是当我提交表单时,它什么都不做。当我检查时,这是错误:

CSRF验证失败。请求中止。

那么,如何在javascript中放置{%csrf_token%}?请给我一些建议。 多谢各位

edit.js:

function bookmark_edit() {
    var item = $(this).parent();
    var url = item.find(".title").attr("href");
    item.load("/save/?ajax&url=" + escape(url), null, function () {
        $("#save-form").submit(bookmark_save);
        });
    return false;
    }

$(document).ready(function () {
    $("ul.bookmarks .edit").click(bookmark_edit);
    });

function bookmark_save() {
    var item = $(this).parent();
    var data = {
        url: item.find("#id_url").val(),
        title: item.find("#id_title").val(),
        tags: item.find("#id_tags").val()
        };
    $.post("/save/?ajax", data, function (result) {
        if (result != "failure") {
        item.before($("li", result).get(0));
        item.remove();
        $("ul.bookmarks .edit").click(bookmark_edit);
        }
        else {
            alert("Failed to validate bookmark before saving.");
        }
        })
        return false;
    }
save_form.html:

<form id = "save-form" method="post" action="/save/">
{% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="Save" />
</form>

您没有为POST发送服务器生成的csrf_令牌以验证数据的有效性。因此出现了错误

作为请求的
数据部分
部分,您需要发送令牌

csrfmiddlewaretoken: '{{ csrf_token }}' 
像这样的

var data = {
    url: item.find("#id_url").val(),
    title: item.find("#id_title").val(),
    tags: item.find("#id_tags").val(),
    csrfmiddlewaretoken: '{{ csrf_token }}' 
};
或者你可以简单地做:

var data = $('form').serialize()

如果您想将整个表单作为字典发送,这就是我使用的。但不确定它是否适用于您的情况

// sending a csrftoken with every ajax request
function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    crossDomain: false, // obviates need for sameOrigin test
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type)) {
            xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
        }
    }
});

var csrftoken=Cookies.get('csrftoken')

setRequestHeader(“X-CSRFToken”,CSRFToken)


我尝试了
csrfmiddlewaretoken:{{{csrf_token}}}
但没有太大帮助。您能解释一下如何将整个表单作为字典发送吗?
var data=$('form')。serialize()
将整个表单作为字典发送。谢谢!这个成功了!Bdw你能给我推荐一些关于最新django版本和javascript的好书吗?我分别深入学习了jQuery和django,这有助于我根据自己的需要将两者结合起来。我建议你在网上阅读大量可用的博客,这些博客可以帮助你把文章整理好。如果你陷入困境,StackOverflow会一直帮助你。书中是否有与csrf相关的问题?
var data = $('form').serialize()
// sending a csrftoken with every ajax request
function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    crossDomain: false, // obviates need for sameOrigin test
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type)) {
            xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
        }
    }
});