Mat*_*res 4 django django-models django-forms django-views
我有一个具有我的权限的模型,在我的视图中使用 CBV(generic.CreateView) 或 (generic.DetailView),如果登录的用户有权限,他可以访问该视图,如果没有访问权限,则显示页面 Forbidden 403 。
但是,如果用户没有该视图的权限,我想引发异常 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'
Run Code Online (Sandbox Code Playgroud)
谁能帮我?谢谢
首先,你不能同时进行重定向和引发 404 异常。
也就是说,如果用户没有权限,您可以重定向到某个页面,也可以引发异常。情况 1:引发异常
要引发异常,您应该在视图类中添加为,
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'
raise_exception = True # Change is hereRun Code Online (Sandbox Code Playgroud)
情况2:重定向到您视图中
设置的特定页面,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'
login_url = '/path/to/specific/page'Run Code Online (Sandbox Code Playgroud)
login_url和会发生什么raise_exception?该类有一个被调用的AccessMixin方法来处理这种情况。handle_no_permission()
Run Code Online (Sandbox Code Playgroud)def handle_no_permission(self): if self.raise_exception: raise PermissionDenied(self.get_permission_denied_message()) return redirect_to_login(self.request.get_full_path(), self.get_login_url(), self.get_redirect_field_name())
这里你可以看到,如果你设置了raise_exception = True,django将不会考虑login_url
| 归档时间: |
|
| 查看次数: |
6526 次 |
| 最近记录: |