【问题标题】:Ajax Request to Django Application对 Django 应用程序的 Ajax 请求
【发布时间】:2017-09-07 15:29:49
【问题描述】:

我正在尝试使用 jquery post 方法提交表单。每次提交表单时,请求参数(request.POST)为空。我不确定为什么 ajax 请求无法发送参数。 js代码:

<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 的视图函数。

【问题讨论】:

  • 请求中有csrf吗? python - Django CSRF 检查失败并出现 Ajax POST 请求 - 堆栈...
  • 是的,发布 html 并查看。
  • 是否需要使用post方法?你可以使用$.ajax() 并通过 CSRF

标签: jquery ajax django


【解决方案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);
        }
    },

【讨论】:

  • 这似乎奏效了。谢谢。顺便说一句,我从 django 设置中删除了 csrf 中间件(只是为了现在开始)。但是,看着您提供的代码,我想知道如何获取 csrf 令牌?因为,无论如何我都会在代码上线时使用它,如果您解释一下 csrf_token 以及需要使用哪些值,我将不胜感激。
  • Django 默认提供跨站请求伪造 (CSRF) 令牌来保护您的视图。您不必担心如何创建它或它的价值,Django 会处理它。您只需在提交表单时传递令牌,使用{{ csrf_token }} 获取值。跨站点请求伪造是对网站的安全攻击。 Django 试图通过要求所有 POST 请求包含令牌来保护您免受这些攻击。阅读here 了解有关 CSRF 的更多信息。
【解决方案2】:

试试@Algorithmatic 的建议,我认为它会起作用。还请访问下面的这些 tuts 以更好地理解 AJAx 请求。这对我来说也很痛苦..

https://realpython.com/blog/python/django-and-ajax-form-submissions/

https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html

【讨论】:

  • 感谢@danae 的建议。立即查看这些帖子
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 2011-04-05
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多