Проверка определенного условия перед обработкой каждого представления в 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")

читайте больше о декораторах здесь.

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