如何在 django 中使用 $.post?

Posted

技术标签:

【中文标题】如何在 django 中使用 $.post?【英文标题】:How to use $.post with django? 【发布时间】:2011-07-21 10:01:09 【问题描述】:

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

这就是我想要做的:

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

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

我如何在 django 中进行 CSRF 保护?有没有办法将 CSRF 令牌添加到 post 数据中?

【问题讨论】:

我想你真的是想问“如何在 Python 中提交 AJAX 请求”,对吧?除了 jquery 之外,任何其他语言或框架中都没有“jquery.Post()”方法。您要求的是等效操作,对吗? @Mike 我相信他在问如何使用 jQuery 将数据发布到 Django,我将(再次)编辑标题以使其更清晰 【参考方案1】:

是的。我相信它存储在 csrf_token 。所以,做吧

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

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

【讨论】:

它实际上是% csrf_token %,否则这是迄今为止最好的解决方案。 哎呀我的意思是 csrf_token 另一个变体是隐藏表单字段变体!很抱歉混淆了这个话题:) 'csrfmiddlewaretoken': ' csrf_token ' 在 Django-1.3 上为我工作 我也是,在 1.3 上它似乎必须是 csrfmiddlewaretoken【参考方案2】:

我通常将包含此内容的文件引用到我希望能够发出 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'));
    
);

【讨论】:

【参考方案3】:

虽然您没有在示例中提供您的 html,但假设您使用的是 &lt;form&gt; 是否安全?如果是这样,请将您的 CSRF 令牌模板标签添加到您的表单并在您的表单上调用 .serialize()

【讨论】:

【参考方案4】:

您可以使用的 Django has a CSRF module 中的 contrib 模块。

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

【讨论】:

我专门讨论了 $.post 方法。我问这个问题的原因是我不想处理这么麻烦的脚本。

以上是关于如何在 django 中使用 $.post?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 1.3 中获取 POST 数据

如何在 Django 1.6 中使用 HTTP POST 请求接收 json 数据?

如何在Django使用ajax的POST

如何在 Django 视图中使用 ajax POST 解析 json 数据

如何在 Django 模型字段中使用 SearchRank?

如何将 POST 数据中的 CSRF 令牌传递给 Django?