Вызывается диспетчерский метод Django FormView, несмотря на то, что test_func() UserPassesTestMixin вернул False

У меня есть представление формы на основе класса, которое реализует как LoginRequiredMixin, так и UserPassesTestMixin

class BookingCreateView(LoginRequiredMixin, UserPassesTestMixin, FormView):

    def dispatch(self, request, *args, **kwargs):
        ...

    def test_func(self):
        return is_customer(self.request.user)

Когда я посещаю страницу, войдя в систему как пользователь, который не прошел тест_функции, вместо того, чтобы получить 404, как результат неудачного теста_функции, код в методе dispatch моего представления выполняется...

Разве test_func() не должен быть вызван перед dispatch()? и если результат test_func() равен False, разве рендеринг представления не должен остановиться в этот момент?

Я думаю, что представленного кода недостаточно, чтобы понять, что вы делаете неправильно. Но я думаю, что код вашего миксина был написан неправильно.

Вот как я бы написал эту статью.

class SomeView(SomeDispatchMixin, ...)
    def dispatch(self, request, *args, **kwargs):
        if not self.test_user(request.user):
            ...    # raise some http error or return http response with some error code
        return super().dispatch(request, *args, **kwargs)

class SomeDispatchMixin:
    def test_user(user):
        ...    # Some logic to test an user
Вернуться на верх