Выполните перенаправление с помощью импортированной функции в вызываемом представлении
У меня есть 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')