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 ошибку.
Немного поработал с промежуточным ПО. Спасибо всем.

Вернуться на верх