django user_passes_test: лучше ли возвращать False или поднять PermissionDenied? - PullRequest
0 голосов
/ 20 июня 2019

Согласно документации django, мы можем просто использовать декоратор user_passes_test для управления доступом к данному представлению.

Вызываемая функция должна возвращать True или False в зависимости от результата теста.

Теперь я просто хочу выдать ошибку HTTP 403 при сбое теста.

Опция 1

Если я следую логике документацииЯ должен:

  • вызвать @user_passes_test(func, login_url='/errors/403')
  • создать представление
def permission_denied(request):
  raise PermissionDenied
  • обновить urlpatterns в urls.py с:
path('errors/403', views.permission_denied, name="error_403"),

Опция 2

Просто raise PermissionDenied в тестовой функции вместо возврата False (нет необходимости в просмотре и изменении или urls.py)

С точки зрения читабельности кода, второй вариант выглядит как cleaner .

Однако он ломает логика из django.

Кто-нибудь посоветует, какой метод лучше?

...