gpt4 book ai didi

javascript - 如何使用 Ajax 从 Django 捕获 PermissionDenied(403)?

转载 作者:行者123 更新时间:2023-12-03 05:56:33 24 4
gpt4 key购买 nike

所以我尝试使用 AJAX 而不是 Django 处理 GET 请求,这样当出现 403 Forbidden (由 Django 给出)时,我可以使用 jQuery 显示一个简单的弹出窗口/模式,但是我现在不知道如何继续.

这是我处理请求的 JavaScript:

只是在我的 html 中获取一个按钮并等待 Click 事件。

main.js

$(document).ready(function(){
$("#users_page").click(function(e){
e.preventDefault();
$.ajax({
"method": "GET",
"url": "/dashby/users/",
"beforeSend": function(xhr, settings){
console.log("Before send");
},
"success": function(result){
window.location.href = "/dashby/users/";
},
"error": function(xhr, textStatus, error){
console.log(error);
},
});
});
});

我对此事的view.py

class AllUsersViews(UserPassesTestMixin, View):
template_name = 'all_users.html'
raise_exception = True # Raise PermissionDenied(403)

def test_func(self):
#Only superusers can access this view.
if self.request.user.is_superuser:
return True

def get(self, request):
context = {'users': User.objects.all()}
return render(request, self.template_name, context)

所以现在,如果我是 super 用户,我确实会被重定向到我想要的页面,但我希望能够基本上向用户显示一条消息(弹出窗口或模式),说明他们没有权限,如果PermissionForbidden 是由 Django 引发的。

此外,我不希望在发生这种情况或 Chrome 控制台显示 403 禁止消息时刷新页面。

我不知道这是否真的有很多问题/是否很长,但感谢提前的任何建议/提示。

最佳答案

您应该能够在 error 处理程序中看到 HTTP 错误:

$.ajax({
...
error: function (xhr, ajaxOptions, thrownError) {
if(xhr.status==403) {
alert(...);
}
}
}

您将始终在控制台中看到 403,因为这是您从服务器获取的 HTTP 响应。

您可以将 test_func 简化为:

class AllUsersViews(UserPassesTestMixin, View):
...

def test_func(self):
return self.request.user.is_superuser

...

关于javascript - 如何使用 Ajax 从 Django 捕获 PermissionDenied(403)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39902510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com