У меня новый вопрос о django (я публикую их потерянные в эти дни ^^).
Вот моя ситуация: у меня есть пользовательский вид входа (зарегистрированный как URL входа в настройках), гдеЯ аутентифицирую пользователей.Я решил сделать пользовательское представление, чтобы иметь возможность добавлять сообщения и журналы.
Аутентификация работает хорошо, но у меня проблема с параметром GET 'next'.Он устанавливается автоматически представлениями, перенаправляющими пользователей для аутентификации.На мой взгляд, он используется для перенаправления пользователя после успешного входа в систему.
Вот код:
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.template import RequestContext
from django.contrib.auth import authenticate, login, logout
import logging
logger = logging.getLogger("views")
def login_user(request):
"""
Displays the login form or authenticates the user if called by POST.
"""
accepted = False
next = request.GET.get('next', None)
if not request.user.is_authenticated():
if request.POST:
# Get the form data and check the user credentials
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
# Log the user in
login(request, user)
logger.info("Login of user : %s", user.username)
# Confirm the login
messages.success(request,_('Login successful. Welcome !'))
accepted = True
else:
messages.error(request,_('This account has been disabled by the administrator.'))
else:
messages.warning(request,_('The given username or password is invalid. Please try again.'))
else:
# If already authenticated
accepted = True
# Choose where to go
if accepted:
return HttpResponse(next)
if next:
return HttpResponseRedirect(next)
else:
return HttpResponseRedirect(reverse('myview'))
else:
return render_to_response('login.html',
context_instance=RequestContext(request))
Следующий параметр корректен, когда пользователь получает доступ к представлению входа в систему, когда ужеauthenticated (first else).
Когда анонимный пользователь пытается перейти к / editor / 25 (например) и перенаправлен для входа в систему для аутентификации, «next» всегда равно None, даже если присутствует в URL (должен быть "/editor/25").
Где-то должна быть одна простая ошибка.Может быть, это связано с authenticate () или login () (django.contrib.auth).
Спасибо за вашу помощь.