Я пытаюсь создать простой веб-сайт с функциональностью входа, очень похожей на ту, что здесь на SO. Пользователь должен иметь возможность просматривать сайт как анонимный пользователь, и на каждой странице будет ссылка для входа. При нажатии на ссылку для входа в систему пользователь попадает в форму для входа. После успешного входа в систему пользователь должен вернуться на страницу, с которой он сначала щелкнул ссылку для входа. Я предполагаю, что мне нужно каким-то образом передать URL текущей страницы представлению, которое обрабатывает форму входа, но я не могу заставить ее работать.
РЕДАКТИРОВАТЬ: Я понял это. Я связался с формой входа в систему, передав текущую страницу в качестве параметра GET, а затем использовал «следующий» для перенаправления на эту страницу. Спасибо!
РЕДАКТИРОВАТЬ 2: Мое объяснение, казалось, не было ясным, так как запрошенный здесь мой код: допустим, мы находимся на странице foo.html, и мы не вошли в систему. Теперь мы хотели бы иметь ссылку на foo.html, которая ссылается к login.html. Там мы можем войти и затем перенаправлены обратно в foo.html. Ссылка на foo.html выглядит так:
<a href='/login/?next={{ request.path }}'>Login</a>
Теперь я написал собственный вид входа в систему, который выглядит примерно так:
def login_view(request):
redirect_to = request.REQUEST.get('next', '')
if request.method=='POST':
#create login form...
if valid login credentials have been entered:
return HttpResponseRedirect(redirect_to)
#...
return render_to_response('login.html', locals())
И важная строка в login.html:
<form method="post" action="./?next={{ redirect_to }}">
Так что да, вот и все, надеюсь, это прояснит.
Ответы:
Вам не нужно делать дополнительное представление для этого, функциональность уже встроена.
Сначала каждая страница со ссылкой для входа должна знать текущий путь, и самый простой способ - добавить препроцессор контекста запроса в settings.py (по умолчанию используются 4 первых), затем объект запроса будет доступен в каждом запросе:
settings.py:
Затем добавьте в шаблон, который вы хотите ссылку Login:
base.html:
Это добавит аргумент GET на страницу входа, которая указывает на текущую страницу.
Шаблон входа в систему может быть таким простым:
регистрация / login.html:
источник
request.path
оно пустое, произойдет сбой , поэтому я делаю его{% firstof request.path '/' %}
таким образом, если путь запроса по какой-то причине недоступен, и пользователь отправляется на домашнюю страницу.<a href="{% url auth_login %}?next={% firstof request.path '/' %}">Login</a>
вместо этого.next
будет что-то вроде,/accounts/logout/
и после того, как пользователь войдет в систему, он сразу же выйдет из системы, lol, и цикл продолжится.Это не может быть "лучшей практикой", но я успешно использовал это раньше:
источник
Для поддержки полных URL с параметрами / значениями вам понадобится:
вместо просто:
источник
Встроенная аутентификация Django работает так, как вы хотите.
Их страницы входа включают
next
строку запроса, которая является страницей, к которой можно вернуться после входа в систему.Посмотрите на http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.decorators.login_required
источник
Я связался с формой входа в систему, передав текущую страницу в качестве параметра GET, а затем использовал «следующий» для перенаправления на эту страницу. Спасибо!
источник
Я столкнулся с той же проблемой. Это решение позволяет мне продолжать использовать общий вид входа в систему:
источник
В
registration/login.html
(вложенный вtemplates
папку), если вы вставите следующую строку, страница отобразится как оригинальная страница входа администратора Django:Примечание: файл должен содержать только строки выше.
источник
Смотрите django docs для views.login () , вы вводите «следующее» значение (как скрытое поле) в форму ввода для перенаправления после успешного входа в систему.
источник
Вы также можете сделать это
источник