Вызывается диспетчерский метод 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