9

如何jquery.post()在 Django 中使用该方法?

这就是我想要做的:

         var postdata={
              'username':$('#login-email').val(), 
              'password':$('#login-password').val()
         }

         $.post('/login/',postdata)

CSRF 如何在 django 中保护它?有没有办法将 CSRF 令牌添加到帖子数据中?

4

4 回答 4

34

是的。我相信它存储在{{ csrf_token }}. 所以,只要做

     var postdata={
          'username':$('#login-email').val(), 
          'password':$('#login-password').val(),
          'csrfmiddlewaretoken': '{{ csrf_token }}'
     }

您可能需要仔细检查名称,但这应该是正确的。

于 2011-03-23T15:21:30.053 回答
8

我通常将包含此内容的文件引用到我希望能够发出 AJAX 请求的每个页面:

if (!$)
    var $ = django.jQuery;

$('html').ajaxSend(function(event, xhr, settings) {
    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = $.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
        // Only send the token to relative URLs i.e. locally.
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    }
});
于 2011-08-17T13:42:47.297 回答
5

尽管您没有在示例中提供 html,但可以安全地假设您使用的是<form>? 如果是这样,请将您的 CSRF 令牌模板标签添加到您的表单并调用.serialize()您的表单。

于 2011-03-23T15:21:45.157 回答
0

contribDjango 中的模块有一个可以使用的 CSRF 模块。

至于您的问题如何发送POST,只要您正确映射了 URL,请求就会发送给它。您可以POST通过检查request.POST请求对象来专门处理请求。

于 2011-03-23T15:21:16.480 回答