【问题标题】:403 Forbidden while making ajax request to endpoint in Django403 Forbidden while making ajax request to endpoint in Django
【发布时间】:2021-02-11 02:05:17
【问题描述】:

我有这个端点,我正在使用 AJAX 从控制台发出发布请求,它不是我发出此请求的网页。

$.ajax({
            type: 'POST',
            url: "http://127.0.0.1:8000/browse/",
            data: {csrfmiddlewaretoken: window.CSRF_TOKEN},
            success: function() {
                console.log("Success!");
            }
        })

但它给了我

VM29 jquery.min.js:2 POST http://127.0.0.1:8000/browse/ 403 (Forbidden)

Django 视图代码除了返回虚拟数据什么都不做

def Browse(request):

    data = [{'name': 'Peter', 'email': 'peter@example.org'},
            {'name': 'Julia', 'email': 'julia@example.org'}]

    return JsonResponse(data, safe=False)

urls.py

urlpatterns = [
    path('browse/', views.Browse, name = 'browse'),

【问题讨论】:

    标签: python jquery json django ajax


    【解决方案1】:

    由于您目前没有使用表单,您可以免除 csrf

    from django.views.decorators.csrf import csrf_exempt
    
    
    @csrf_exempt
    def Browse(request):
    
        data = [{'name': 'Peter', 'email': 'peter@example.org'},
                {'name': 'Julia', 'email': 'julia@example.org'}]
    
        return JsonResponse(data, safe=False)
    

    【讨论】:

      【解决方案2】:

      试试这个

      data: {"csrfmiddlewaretoken" : "{{csrf_token}}"}
      

      而不是

      data: {csrfmiddlewaretoken: window.CSRF_TOKEN},
      

      希望这对您有用,否则请点击此链接: https://docs.djangoproject.com/en/dev/ref/csrf/#ajax

      【讨论】:

      • 没有在控制台上得到同样的东西,但是在终端上我得到了Forbidden (CSRF cookie not set.): /browse/ [28/Oct/2020 22:16:01] "POST /browse/ HTTP/1.1" 403 2864
      • 没有获取 csrf 令牌使用链接中提到的 getcokkie 方法获取 csrf 令牌docs.djangoproject.com/en/dev/ref/csrf/#ajax
      猜你喜欢
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2022-12-26
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      相关资源
      最近更新 更多