Django3.0 实现用户登录注销

准备工作:创建bookmarks项目,并在其下面创建account app。

具体步骤

一、在installed app里注册account,注意要把它注册在最前面,如下:

INSTALLED_APPS = [
    'account',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

]

二、在account 的urls.py文件添加Django自带的Django.contrib.auth.views模块,该模块有LoginView,LogoutView,PasswordChangeView,PasswordChangeDoneView,PasswordResetView,PasswordResetDoneView,PasswordResetConfirmView和PasswordRestCompleteView,可以完成用户登录、注销、修改密码、重置密码的功能。以登录和注销为例说明如何利用这些功能。

因为他们本质上是views,所以我们直接可以在urls.py引用他们:导入这些view,并在路由路径中配置对应的views.代码如下:

from django.urls import path
from django.contrib.auth import views as auth_views


urlpatterns = [
    path('login/',auth_views.LoginView.as_view(),name='login'),
    path('logout/',auth_views.LogoutView.as_view(),name='logout'),
   
]

三、我们再创建相应的login和logout templates。这里有一点需要注意,因为我们使用的是自带的view,所以templates的路径也需要按指定的要求,template的名字也是固定的。Django.contrib.auth.views会在app的templates/registration文件下读取相应的template(login读取login.html,logout读取logged_out.html,一定要注意文件名!否则会读不到)。先在templates创建base.html,设定基本模板,然后在registration下创建login.html和logged_out.html文件,并引用base.html。代码如下:

#base.html

<!DOCTYPE html>
<html>
    <head>
        <title>{% block title %}
            {% endblock %}
        </title>
    </head>
    <body>
        <div id="header"> 
            <span class="user">        
                <!-- 当前用户包含在HttpRequest对象中,可以通过request.user访问 -->
                {% if request.user.is_authenticated %} 
                Hello {{request.user.username}}
                <!-- 将超链接指向urls.py中的logout -->
                <a href ="{% url "logout" %}">Logout</a>
                {% endif %}
            </span>
        </div>
        <div id = "content">
            {% block content %}
            {% endblock %}
        </div>
    </body>
</html>


#registration/login.html(django.contrib.auth.view指定名称,不能修改,否则出错)

{% extends 'base.html' %} 
{% block tiltle %} 
<p>Log in</p>
{% endblock %} 
{% block content %} 
<h1>Log-In</h1>
{% if form.error %} 
<p>
    Your username and password didn't match.
    Please try again
</p>
{% else %} 
<p>Please, use the following form to log-in:</p>
{% endif %} 
<div class ="login-form">
    <form action ="{% url 'login' %}" method = 'post'>
        <!-- form是通过 django.contrib.auth.views穿过来的参数,固定名称 -->
        {{ form.as_p}}
        <!-- 对传递信息进行加密,不设置无法通过 -->
        {% csrf_token %}
    <p><input type ="submit" value="Log-in"></p>
    </form>
</div>
{% endblock %} 

#registration/logged_out.html(django.contrib.auth.view指定名称,不能修改,否则出错)
{% extends "base.html" %} 
{% block title %} Logged out {% endblock %} 
{% block content %} 
    <h1>Logged out</h1>
    <p>
        You have been sucessfully logged out.
         <!-- 将超链接指向urls.py中的logoin -->
        You can <a href=" {% url "login" %}">log-in again</a>
    </p>
{% endblock %} 

四、我们需要编写登录成功的页面,这个文件的名称可以自定义,如dashboard.html。我们把他放在templates根目录下,创建一个新的文件夹也可以。代码如下,比较简单,可以进一步扩展。

{% extends "base.html" %} 
{% block title %} 
    Dashboard
{% endblock %} 
{% block content %} 
    <h1>Dashboard</h1> 
    <p>Welcome to your dashboard.</p> 
{% endblock %} 

最后,我们要设置重定向,再登录成功后将页面转到dsashboard。先在urls.py中增加dashboard对应的路径,然后在settings.py中设置LOGIN_REDIRECT_URL='dashboard'。

        urls.py设置

from django.urls import path
from django.contrib.auth import views as auth_views
from . import views


urlpatterns = [
    path('login/',auth_views.LoginView.as_view(),name='login'),
    path('logout/',auth_views.LogoutView.as_view(),name='logout'),
    path('',views.dashboard,name='dashboard'),
   
]

        setting.py设置

# LOGIN_URL 和LOGOUT_URL可以不设
#LOGIN_URL = 'login'
#LOGOUT_URL ='logout'

LOGIN_REDIRECT_URL = 'dashboard'

至此,用户登录与注销界面设定完毕。

测试运行效果:

        -在usermgt目录下运行python manage.py migrate,创建相应的数据库。

        - 通过python manage.py createsuperuser usr,创建用户

        - 运行python manage.py runserver启动服务器,在浏览器中输入:localhost:8000/account/login

输入我们刚刚创建的用户名密码,提示登录成功。

 退出登录

        说明已经成功配置用户登录和密码。

 

 总结:在利用用authenticate_framework设置用户登录和注销功能时,应注意几个点

        1. Installd App:要把创建的app放在最前面至少在Django.contrib.auth前面,避免Django在处理logout时,读取admin模块的logout

        2.login和logout模板需要放在指定位置,使用指定名字(templates/registration/login.html,templates/registration/logged_out.html)

        3.需要在settings.py中设置登录成功后重订向试图LOGIN_REDIRECT_URL ='dashboard'

        

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值