2017-04-12 144 views
0

我想通过使用jquery post方法提交表单。每次提交表单时,请求参数(request.POST)都是空的。我不确定为什么ajax请求无法发送参数。 JS代码:Ajax请求Django应用程序

<script> 
$('#myform').on('submit', function(e){ 
    let username = $("#username").val(); 
    let password = $("#password").val(); 
    let url = $('#myform').attr('action'); 
    $.post(url, { 
    username:username, 
    password:password 
    }, function(d){ 
    alert('success'); 
    }); 
}); 
$('#login').click(function(e){ 
    e.preventDefault(); 
    $('#myform').submit(); 
}); 

那我在这一步做错了什么?如果需要,我可以使用html表单和处理表单动作url的view函数。

+0

你的请求已经CSRF? python Django的CSRF检查与Ajax POST请求失败 - Stack ... – cph

+1

是的,张贴HTML和视图。 –

+0

你需要使用'post'方法吗?你可以使用'$ .ajax()'并传递CSRF – Algorithmatic

回答

1

请尝试使用以下内容,并检查Django服务器日志以检查是否收到请求,以及请求状态码是什么。

$.ajax({ 
     url: url, 
     data: data: { 
         username:username, 
         password:password, 
         csrfmiddlewaretoken: '{{ csrf_token }}' 
        }, 
     type: 'POST', 
     success: function(data) { 
      console.log(data.message); 
     }, 
     error: function(data) { 
      console.log(data.message); 
     } 
    }, 
+0

这似乎奏效了。谢谢。顺便说一句,我从django设置中删除了csrf中间件(只是为了现在开始)。然而,看着你介绍的代码,我想知道如何获得一个csrf标记?因为,当代码上线时我会使用它,如果你解释了csrf_token并且需要使用什么值,我将不胜感激。 –

+0

Django默认提供了一个跨站点请求伪造(CSRF)令牌来保护您的视图。您不必担心如何创建它或它的价值,Django会照顾它。您只需在提交表单时通过使用'{{csrf_token}}'来获取该值即可传递该标记。跨网站请求伪造是对网站的安全攻击。 Django试图通过要求所有POST请求包含令牌来保护您免受这些攻击。阅读[这里](https://docs.djangoproject.com/en/1.10/ref/csrf/)以获取更多关于CSRF的信息。 – Algorithmatic