Проверка определенного условия перед обработкой каждого представления в Django
Я создаю многопользовательское приложение Django, где мне нужно проверять определенное условие перед обработкой каждого представления, аналогично декоратору login_required, который проверяет, аутентифицирован пользователь или нет.
А если условие не истинно, прекратите обработку представления и отправьте пользователя на страницу входа.
Как я могу реализовать это для каждого представления в моем приложении
Мое состояние -
def index_view(request): domain1 = Domain.objects. get(tenant=request.user.client_set.first()) domain2 = request.META["HTTP_HOST"].split(":")[0] // Condition if str(domain1) != domain2: return redirect("accounts:login") return render(request, "dashboard/index.html") Вы можете использовать декоратор @user_passes_test, как в коде ниже
создайте метод condition_to_fulfil(user)
def condition_to_fulfil(user):
# enter condition here
if user_meets_condition:
return True
else:
return False
Добавьте декоратор над вашим представлением следующим образом
@login_required
@user_passes_test(condition_to_fulfil, login_url="/login/")
def index_view(request):
domain1 = Domain.objects.get(tenant=request.user.client_set.first())
domain2 = request.META["HTTP_HOST"].split(":")[0]
Вы можете создать декоратор, который будет выполнять эту работу за вас
def check_domain(func):
def wrapper(request, *args, **kwargs):
domain1 = Domain.objects.get(tenant=request.user.client_set.first())
domain2 = request.META["HTTP_HOST"].split(":")[0]
# Condition
if str(domain1) != domain2:
return redirect("accounts:login")
return func(request, *args, **kwargs)
return wrapper
@check_domain
def index_view(request):
return render(request, "dashboard/index.html")
читайте больше о декораторах здесь.