Django - логин - перенаправлять на определенный URL только при входе с домашней страницы - PullRequest
0 голосов
/ 13 сентября 2018

Существует два сценария входа пользователя:

  1. Вход с домашней страницы
  2. Сессия истекла, и пользователь вышел из системы.Пользователь был вынужден повторно войти в систему, чтобы остаться на текущей странице (используется @login_required декоратор)

С использованием декоратора @login_required, если я не укажу LOGIN_REDIRECT_URL вsettings.py, если пользователь вышел из системы из-за истечения срока сеанса и снова вошел в систему, он будет перенаправлен обратно на свою текущую страницу, например:

http://127.0.0.1:8000/?next=/my-current-url-page/

Это оченьхорошая функция, и я хотел бы придерживаться ее, но если я нахожусь в Scenario 1, он будет перенаправлен на:

http://127.0.0.1:8000/accounts/profile/

Я хочу указывать URL перенаправления только тогда, когдапользователь входит в систему с домашней страницы.Как установить исключение, при котором пользователь входит в систему с домашней страницы?

urls.py

# this renders the home page
re_path('^$', auth_views.login, {'template_name': 'login.html'}, name='login'),

# this renders the other pages
path('well_list/', decorator_include(login_required, [

    re_path(....),
    re_path(....),

    ]))

FYI, decorator_include - это кодфрагмент, который позволяет применять декоратор для шаблонов URL с include().

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете сделать это следующим образом (адаптировано для создания шаблона и изменения переменных):

view.py

def login_user(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
    login(request, user)
    return HttpResponseRedirect(settings.LOGIN_DOCUMENT_REDIRECT_URL)
return render(request, 'foobar.html')

url.py

url('login', views.login_user)

теперь вы можете написать свою форму для шаблона

...