gpt4 book ai didi

django - 如何使用 CBV 将 PermissionDenied Redirect 提升到另一个页面?

转载 作者:行者123 更新时间:2023-12-04 02:57:48 24 4
gpt4 key购买 nike

我有一个具有我权限的模型,在我使用 CBV(generic.CreateView) 或 (generic.DetailView) 的 View 中,如果登录的用户具有权限,他可以访问该 View ,如果没有访问该页面禁止 403 显示。

但是,如果用户没有该 View 的权限,我想引发异常 PermissionDenied,并针对此错误重定向到特定页面。

我的看法:

class AddJob(LoginRequiredMixin, PermissionRequiredMixin, generic.CreateView)

permission required = 'can_create_job'
model = Job
fields = ['name', 'description', 'salary']
success_url = reversy_lazy('job_list)
context_object_name = 'object_name'

谁能帮帮我?谢谢

最佳答案

首先,您不能同时执行重定向引发 404 异常

也就是说,如果用户没有权限,您可以或者重定向到某个页面或者引发异常。

案例 1:引发异常
要引发异常,您应该在 View 类中添加 raise_exception = True 作为,

class AddJob(LoginRequiredMixin, PermissionRequiredMixin, generic.CreateView):
permission_required = 'can_create_job'
model = Job
fields = ['name', 'description', 'salary']
success_url = reversy_lazy('job_list')
context_object_name = 'object_name'
<b>raise_exception = True # Change is here</b>

案例 2:重定向到特定页面
在您的 View 中设置 login_url

class AddJob(LoginRequiredMixin, PermissionRequiredMixin, generic.CreateView):
permission_required = 'can_create_job'
model = Job
fields = ['name', 'description', 'salary']
success_url = reversy_lazy('job_list')
context_object_name = 'object_name'
<b>login_url = '/path/to/specific/page'</b>



如果同时设置 login_urlraise_exception 会发生什么?

AccessMixin类有一个方法 handle_no_permission()正在调用它来处理这种情况。

Source Code

def handle_no_permission(self):
<b>if self.raise_exception:
raise PermissionDenied(self.get_permission_denied_message())</b>
return redirect_to_login(self.request.get_full_path(), self.get_login_url(), self.get_redirect_field_name())

在这里你可以看到,如果你设置 raise_exception = Truedjango 将不会考虑 login_url

关于django - 如何使用 CBV 将 PermissionDenied Redirect 提升到另一个页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106944/

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