我的登录网址是
url(r'^login/$', 'django.contrib.auth.views.login',
{'template_name': 'login.html',
'extra_context': {'next': '/tasks/home/',
'title': 'Taskman | Log In'},
并且登录成功,但当我再次输入“/ user / login”作为URL时,它会在成功登录后再次显示登录页面。
Django也不处理这种情况吗?
由于login
次观看次数
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
current_app=None, extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.REQUEST.get(redirect_field_name, '')
if request.method == "POST":
form = authentication_form(request, data=request.POST)
if form.is_valid():
# Ensure the user-originating redirection url is safe.
if not is_safe_url(url=redirect_to, host=request.get_host()):
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
# Okay, security check complete. Log the user in.
auth_login(request, form.get_user())
return HttpResponseRedirect(redirect_to)
else:
form = authentication_form(request)
current_site = get_current_site(request)
context = {
'form': form,
redirect_field_name: redirect_to,
'site': current_site,
'site_name': current_site.name,
}
if extra_context is not None:
context.update(extra_context)
return TemplateResponse(request, template_name, context,
current_app=current_app)
所以我必须覆盖AuthenticationForm
吗?
答案 0 :(得分:1)
这是我一直看到的Django行为 - 即使您已登录,并且您尝试导航到登录页面,它将显示登录页面。在某些情况下这是有用的行为,例如,如果一个人有多个可以登录的用户帐户,这意味着他们可以登录到其他用户帐户而无需先退出。
如果您希望覆盖此行为,可以通过将登录网址指向RedirectView
来执行此操作:
希望这有帮助。