Python Django:CSRF验证失败。请求中止

Python Django:CSRF验证失败。请求中止,python,django,python-3.x,cookies,Python,Django,Python 3.x,Cookies,被调用的视图函数如下所示 def parsing(request): url = request.POST['url'] ... return HttpResponse(json.dumps(resultDict)) 当我通过以下代码向其发出post请求时 import requests url = 'http://tv.cntv.cn/video/C12278/a7ea7c0e810b4701bf1d3f5254b8a26a' c = requests.post("h

被调用的视图函数如下所示

def parsing(request):
    url = request.POST['url']
    ...
    return HttpResponse(json.dumps(resultDict))
当我通过以下代码向其发出post请求时

import requests
url = 'http://tv.cntv.cn/video/C12278/a7ea7c0e810b4701bf1d3f5254b8a26a'
c = requests.post("http://127.0.0.1:8000/VideoParser/", data={'url': url})
print(c.text)
然后请求失败,它只给出以下HTML代码


403禁止
html*{填充:0;边距:0;}
正文*{padding:10px 20px;}
正文**{填充:0;}
正文{font:small sans serif;背景:#eee;}
body>div{边框底部:1px实心#ddd;}
h1{字体大小:正常;页边距底部:.4em;}
h1 span{字体大小:60%;颜色:#666;字体大小:正常;}
#信息{背景:#f6f6f6;}
#信息ul{边距:0.5em 4em;}
#信息p,#摘要p{填充顶部:10px;}
#摘要{背景:#ffc;}
#说明{背景:#eee;边框底部:0px无;}
禁止(403)
CSRF验证失败。请求被中止

您看到此消息是因为此站点在提交表单时需要CSRF cookie。出于安全原因,需要使用此cookie,以确保您的浏览器不会被第三方劫持

如果您已将浏览器配置为禁用Cookie,请至少为此网站或'重新启用Cookie;同源';请求

帮助 失败原因:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def parsing(request):
    url = request.POST['url']
    ...
    return HttpResponse(json.dumps(resultDict))

您使用的是POST请求,它通过请求令牌再次受到CSRF攻击的保护


您可以在Django docs上阅读有关CSRF令牌的更多信息:

您使用的是POST请求,它通过请求令牌再次受到CSRF攻击的保护


您可以在Django docs上阅读有关CSRF代币的更多信息:

您可以使用
CSRF\u豁免
装饰器查看:

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');
从文档中:

此装饰器将视图标记为不受保护 由中间件保证


您可以阅读有关csrf保护的更多信息

您可以使用
csrf\u豁免
decorator查看:

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');
从文档中:

此装饰器将视图标记为不受保护 由中间件保证


您可以阅读有关csrf保护的更多信息

对于此问题,您有两种选择

第一:-

如果您想使用csrf身份验证,您必须在来自前端的每个请求中添加cookie,因为您需要在前端代码中添加以下SniPet

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)


MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

希望它能帮助你

对于这个问题,您有两种选择

第一:-

如果您想使用csrf身份验证,您必须在来自前端的每个请求中添加cookie,因为您需要在前端代码中添加以下SniPet

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)


MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

希望它能帮助你

只需从设置中的中间件类中删除“django.middleware.csrf.CsrfViewMiddleware”。py

只需从设置中的中间件类中删除“django.middleware.csrf.CsrfViewMiddleware”。py

只需一个简单的
csrf\u豁免
装饰程序即可完成这项工作。请看下面我的答案。只要一个简单的
csrf\u豁免
decorator就可以完成这项工作。请看下面我的答案。我认为从中间件中删除
django.middleware.csrf.CsrfViewMiddleware
是不明智的。这就是
csrf\u export
decorator所代表的。我认为从中间件中删除
django.middleware.csrf.csrfviewmidleware
是不明智的。这就是装饰师的意思。