Перенаправление Django после входа в систему - PullRequest
1 голос
/ 10 июля 2019

У меня есть приложение, в котором я пытаюсь разрешить вход только по имени пользователя. Я делал это:

@login_required(login_url='/login')
def index(request):
    # bunch of queries to provide to the add_rule.html via context
    return render(request, "index.html", context=context)


def user_login(request):
    if request.method == 'GET':
        return render(request, 'registration/login.html')
    else:
        username = request.POST.get('username')
        user = authenticate(username=username) # custom function 
        login(request, user)

        # somehow return the above previous index() function with the request that has updated login/username information

Я не совсем уверен, как я могу отобразить шаблон index.html с запросом, который теперь содержит информацию для входа. В документах не ясно, как все перенаправляется после входа в систему. Прошу прощения, если информации недостаточно.

1 Ответ

0 голосов
/ 10 июля 2019

login_required [Django-doc] имеет параметр redirect_field_name. Это указывает имя параметра GET, который будет кодировать путь, с которого было выполнено перенаправление. По умолчанию этот параметр равен 'next'.

Таким образом, вы можете перенаправить с помощью:

from django.http import HttpResponseRedirect

def user_login(request):
    if request.method == 'GET':
        return render(request, 'registration/login.html')
    else:
        username = request.POST.get('username')
        user = authenticate(username=username) # custom function 
        login(request, user)
        return <b>HttpResponseRedirect(self.request.GET.get('next', ''))</b>

Однако вам придется реализовать некоторую дополнительную логику в случае сбоя аутентификации и т. Д.

LoginView [Django-doc] имеет немного более сложную реализацию [GitHub] , которая предназначена для извлечения этого из параметров POST , GET параметров и выполняет некоторую проверку для проверки безопасности пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...