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
是不明智的。这就是装饰师的意思。