Django REST,ajax调用中突然出现403错误
Posted
技术标签:
【中文标题】Django REST,ajax调用中突然出现403错误【英文标题】:Django REST, sudden 403 error in ajax call 【发布时间】:2016-06-04 02:02:15 【问题描述】:我有一个基本的看法
@api_view(['POST'])
def test(request):
id = request.POST.get("id")
response =
try:
obj = MyModel.objects.get(id=id)
response['can'] = False
except MyModel.DoesNotExist:
response['can'] = True
return Response(response)
在网址中
url(r'^test', test),
模板中的简单调用:
$.ajax(
type : "POST",
data : id:id,
url : "/test/",
success: function(data)
if(data['can'])
$("#Test").show();
else
$("#Test").hide();
,
error: function(error)
console.log(error);
);
而且它最近有效。但是今天,当我测试这个应用程序时,我得到了错误:
[22/Feb/2016 15:09:02] "POST /test/ HTTP/1.1" 403 58
意思是“禁止访问”。我不知道是怎么回事。也许你可以帮忙。
编辑 我刚刚注意到它发生在Firefox浏览器上。在 ubuntu 的“浏览器”和谷歌浏览器上,我没有这个 403 错误。
编辑 2 哦,当我将 firefox 作为私有/隐身窗口运行时,我没有这个 403 错误。仅当我使用“普通”Firefox 时才会出现此错误。
【问题讨论】:
【参考方案1】:可能的问题:可能是之前的用户会话仍在浏览器 cookie 中。尝试清除 Firefox 浏览器的 cookie。
下次尝试时,您可能会再次遇到该问题,因此您可以追溯为什么某些用户没有被授予权限。
【讨论】:
【参考方案2】:没有用户或任何权限。这是“未登录”用户的应用程序。
我刚刚为 ajax 调用添加了 csrf 保护。 (来自 django 文档)
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]);
if (cookie.substring(0, name.length + 1) == (name + '='))
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
return cookieValue;
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method)
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
$.ajaxSetup(
beforeSend: function(xhr, settings)
if (!csrfSafeMethod(settings.type) && !this.crossDomain)
xhr.setRequestHeader("X-CSRFToken", csrftoken);
);
而且它的工作。我觉得对吗?这个错误是由于缺少csrf保护造成的吗?
【讨论】:
以上是关于Django REST,ajax调用中突然出现403错误的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 发布 Django Rest Framework 出现 403 禁止错误
POST 请求创建多个对象 AJAX/Django Rest Framework
每当我通过 ajax 调用它时,Django Rest 框架会用 AnonymousUser 替换我当前经过身份验证的用户吗?
是否可以在 Django Rest Framework 中的 ajax 请求期间追溯 403 错误?