我有一个基本的观点
@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错误。我只有在使用' normal'火狐。
答案 0 :(得分:1)
可能的问题: 可能是之前的用户会话仍在浏览器Cookie中。尝试清除firefox浏览器的cookie。
在下次尝试时,您可能会再次遇到此问题,因此您会跟踪某些用户未获得权限的原因。
答案 1 :(得分:1)
没有用户或任何权限。这是适用于“不登录”的应用程序用户。
我刚刚为ajax调用添加了csrf protecion。 (来自django docs)
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保护引起的?