如何扩展django.contrib.auth视图?

时间:2018-05-18 09:47:44

标签: django

我如何安排模板:我已将login.html放在Django的/templates/registration文件夹中。因此,Django根据请求对accounts/loginaccounts/logout url请求和呈现进行必要的处理。我无法为单个loginlogout函数编写代码。

我想要实现的目标:我想在登录请求时,当他们请求登录页面时对用户进行身份验证:

        
  • 如果用户是匿名用户,我想呈现正常的登录页面。
  •     
  • 但是,如果用户已经过身份验证,那么我已登录。我想显示错误,而不是显示已记录的页面。

我想在 views.py urls.py 中实现这一点,而不是在模板中实现: <击>

<击>
{% if user.is_authenticated %}
{% if user.is_anonymous %}

Urls.py

from django.conf.urls import url
from django.contrib.auth import views as auth_views
from . import views
urlpatterns=[
                    url(r'^register/$', views.register, name='register'),
                    url(r'^logout/$', auth_views.logout, {'next_page' : 'Homepage'}, name='logout'),
]

2 个答案:

答案 0 :(得分:1)

您可以使用自己的视图包装视图,视图可以重定向或调用原始视图。

def wrapped_login(request):
    if request.user.is_authenticated:
        return redirect('whatever')
    else:
        return auth_views.login(request)

答案 1 :(得分:1)

LOGIN_REDIRECT_URL = '/'中提供settings.py。然后使用以下URL登录页面:

urlpatterns = [
    url(r'^login/',
        auth_views.LoginView.as_view(redirect_authenticated_user=True),
        name='login'),
]

如果用户在经过身份验证后尝试登录,则会将用户重定向到设置文件中提供的网址。