Прежде всего, вы не можете сделать и перенаправление и повышение 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'
<b>raise_exception = True # Change is here</b>
Случай 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'
<b>login_url = '/path/to/specific/page'</b>
Что произойдет, если вы установите login_url
и raise_exception
?
Класс AccessMixin
имеет метод handle_no_permission()
, который вызывается для обработки этого условия.
Исходный код
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 = True
, Джанго не будет учитывать login_url