403 Forbidden while making ajax request to endpoint in Django

Posted

技术标签:

【中文标题】403 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'),

【问题讨论】:

【参考方案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

以上是关于403 Forbidden while making ajax request to endpoint in Django的主要内容,如果未能解决你的问题,请参考以下文章

git推送到github报错:error: The requested URL returned error: 403 Forbidden while accessing https://github

403 forbidden啥意思,怎么修复解决403 forbidden

403 forbidden nginx怎么解决

nginx 403 forbidden怎么解决

apache 403 forbidden怎么解决

解决 Nginx 403 forbidden