【问题标题】:csrf.py _reject: Forbidden (CSRF token missing or incorrect.)csrf.py _reject:禁止(CSRF 令牌丢失或不正确。)
【发布时间】:2018-09-11 22:53:04
【问题描述】:

我收到 403 禁止错误,WARNING csrf.py _reject: Forbidden (CSRF token missing or incorrect.) 是 django 日志。

这是我的html,jquery-

function req() {
    var server_id = $( "#server option:selected" ).val();
    $.post("/sp/add_req", JSON.stringify({ cir: {{  cir  }}, server_id: server_id, csrfmiddlewaretoken: {{ csrf_token }}}), function (data) {
       console.log(data)
    });
}

和views.py-

def add_request(request):
    ....
    return JsonResponse({'success': True})

我在设置中有“django.middleware.csrf.CsrfViewMiddleware”。出了什么问题以及如何解决?

【问题讨论】:

  • 根据此处的示例 2,您不必在 JQuery 帖子上使用 JSON.stringify:w3schools.com/jquery/ajax_post.asp
  • 是的,但如果没有 jsonstringify,它就无法工作 - 给出 JSON 解码错误。我不知道为什么。

标签: django django-csrf


【解决方案1】:

{% csrf_token %} 将呈现为<input type="hidden" name="csrfmiddlewaretoken" value="xxxxxx">。因此,您可以单独渲染它,然后使用 javascript 创建 JSON 对象。

var csrfToken = $('[name="csrfmiddlewaretoken"]').val();
var data = {'csrfmiddlewaretoken': csrfToken);

然后在您的帖子中发送数据。我更喜欢使用Fetch API 发帖。

【讨论】:

    【解决方案2】:

    使用 AJAX 时,您需要将 CSRF 令牌与您的请求一起传递。在官方指南中查看更多信息:https://docs.djangoproject.com/en/2.1/ref/csrf/#ajax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2021-01-08
      • 2021-02-23
      • 2015-10-15
      • 2020-12-24
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多