Выполните перенаправление с помощью импортированной функции в вызываемом представлении

У меня есть Django App "A" с представлением "view_A", в котором я выполняю функцию:

from app_B.views import usercheck_B

def view_A(request):
  function_B(request)
  return render(request)

А в моем Django App "B" с функцией "usercheck_B":

def usercheck_B(request):
  if not request.user.is_authenticated:
  redirect('view_B:login')

Я хочу, чтобы клиент напрямую перенаправлялся, если он не вошел в систему в вызываемой функции. Но это не работает. Я могу вернуть только Httpresponse к моему первому вызванному представлению "view_A" с перенаправлением на login.

Моя идея состоит в том, чтобы поместить функцию usercheck_B в каждый вид, который у меня есть, и перенаправлять посетителей. Но я хочу делать эту проверку и в особых случаях, если, например, другие параметры не подходят.

Вы можете использовать декоратор вместо этого, но то, что вы делаете здесь, уже существует: это декоратор @login_required [Django-doc]. Действительно, вы можете использовать:

from django.contrib.auth.decorators import login_required


@login_required
def view_A(request):
    return render(request, 'some-template.html')

Затем вы можете задать url для входа в систему в настройках LOGIN_URL [Django-doc]:

# settings.py

from django.urls import reverse_lazy

# …

LOGIN_URL = reverse_lazy('view_B:login')
Вернуться на верх