Django PermissionDenied возвращает ошибку 500 вместо 403
Итак, в моем проекте Django 4.0 есть представление, основанное на классе, которое наследует UserPassesTestMixin
.
.
Если test_func
возвращает False, он выбрасывает исключение PermissionDenied
, которое в свою очередь должно возвращать 403.html
Но вместо 403 я получаю 500 ошибку сервера.
Я прочитал в Django docs, что PermissionDenied должен вызывать django.views.defaults.permission_denied, но это не так.
.
Пожалуйста, дайте мне совет.
class PostListView(UserPassesTestMixin, HomeView, ListView):
template_name = "diary/post_list.html"
queryset = Post.objects.all()
permission_denied_message = "Access for staff only!"
def test_func(self):
return self.request.user.is_staff
Я решил эту проблему, поймав PermissionDenied
исключение в handle_no_permission
:
def handle_no_permission(self):
try:
return super().handle_no_permission()
except PermissionDenied as e:
return permission_denied(self.request, e)
Но это выглядит неестественно...
Ошибка была вызвана использованием моего пользовательского middleware
, который ловит все необработанные исключения и возвращает 500 ошибку (и записывает ее в журнал).
Поэтому я просто поймал исключение PermissionDenied там и вернул правильную 403 ошибку.
Немного поработал с промежуточным ПО. Спасибо всем.