#python #django
#python #django
Вопрос:
Я пытаюсь создать страницу входа и выхода из системы с помощью django. Проблема, с которой я сталкиваюсь, заключается в том, что когда я отправляю форму, она не указывает URL, который я указал. Когда я нажимаю кнопку входа, я хочу, чтобы она переходила к http://127.0.0.1:8000/home / но вместо этого он переходит к http://127.0.0.1:8000/?next=/home /.
Ниже приведен мой код входа в систему в моем view.py:
def login(request):
def errorHandler(error):
return render_to_response('login.html', {'error' : error})
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username = username, password = password)
if user is not None:
if user.is_active:
authLogin(request, user)
fullName = user.get_full_name
return render_to_response('logged_in.html', {'full_name': fullName})
else:
error = 'Account disabled.'
return errorHandler(error)
else:
error = 'Invalid details entered.'
return errorHandler(error)
return render_to_response('login.html')
@login_required
def logout(request):
authLogout(request)
return render_to_response('logged_in.html')
мой login.html:
{% extends "base.html" %}
{% block content %}
{% if error %}
<p><b><font color="red">Error: </font></b>{{ error }}</p>
{% endif %}
<form action="/home/" method="post">
<label for="username">User name:</label>
<input type="text" name="username" value="" id="username">
<label for="password">Password:</label>
<input type="password" name="password" value="" id="password">
<input type="submit" value="Login" />
<input type="hidden" name="next" value="{{ next|escape }}" />
</form>
{% endblock %}
мой logged_in.html:
{% extends "base.html" %}
{% block name %}{{ full_name }} is {% endblock %}
{% block content %}
<p><a href='/'>Logout</a></p>
{% endblock %}
url:
(r'^$', 'myapp.views.login'),
(r'^home/$', 'myapp.views.logout'),
Пожалуйста, помогите
Ответ №1:
Проблема в том, что вы фактически не регистрируете пользователя, форма отправляет не прошедшего проверку подлинности пользователя /home/
, который не может обработать, потому что для этого требуется логин. 🙂 Таким образом, он перенаправляет пользователя на просмотр входа в систему, сохраняя назначение в next
параметре.
Решение: <form action="" method="post">
Комментарии:
1. Это работает. Однако, поскольку он по-прежнему 127.0.0.1: 8000 (не изменяет URL), он фактически не использует представление выхода из системы. Он просто переходит на эту страницу. (для просмотра выхода установлено значение /home/)
2.
LOGIN_REDIRECT_URL = '/home/'
в settings.py3. Я пробовал это раньше, но URL по-прежнему остается как 127.0.0.1:8000. Должен ли я указывать URL-адрес перенаправления в моем представлении? или это может иметь какое-то отношение к render_to_response? Я пробовал HttpResponseRedirect, но мне нужно, чтобы содержимое передавалось в шаблон, как вы можете видеть в моем коде в настоящее время.
4. Да, я был неправ,
LOGIN_REDIRECT_URL
не будет иметь никакого эффекта, поскольку вы не используете встроенноеlogin
представление. Итак, перенаправление — это ваша задача. Если вы хотите сохранить контекст между перенаправлениями, вы можете использовать параметры GET, сеансы, файлы cookie и так далее. By зачем вам это нужно? После входа в систему объект пользователя будет доступен из любого представления (request.user
). И, кстати, гораздо лучше не изобретать велосипед и использовать встроенные представления (django.contrib.auth.views
)5. Да, я думаю, почему я пытаюсь реализовать свой собственный вид входа / выхода, потому что я понятия не имею, как я буду отображать полное имя пользователя при входе в систему (т. Е. Добро пожаловать, Джон Смит) Я пытался сделать это, как вы сказали: (r ‘^home/$’, ‘django.contrib.auth.views.logout’, {‘имя_шаблона’: ‘logged_in.html ‘}) но я понятия не имею, где запрашивать информацию о пользователе. Будет ли это каким-то образом сделано в представлениях? Извините за это, как вы можете сказать, я довольно плохо разбираюсь в django;(
Ответ №2:
возможно, вам следует попытаться удалить скрытый ввод с помощью name =»next»http://docs.djangoproject.com/en/1.2/topics/auth/#django.contrib.auth.views.login