准备工作:创建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,PasswordReset/confirm/iView和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
{% block title %}
{% endblock %}
{% if request.user.is_authenticated %}
Hello {{request.user.username}}
Logout
{% endif %}
{% block content %}
{% endblock %}
#registration/login.html(django.contrib.auth.view指定名称,不能修改,否则出错)
{% extends 'base.html' %}
{% block tiltle %}
Log in
{% endblock %}
{% block content %}
Log-In
{% if form.error %}
Your username and password didn't match.
Please try again
{% else %}
Please, use the following form to log-in:
{% endif %}
{% endblock %}
#registration/logged_out.html(django.contrib.auth.view指定名称,不能修改,否则出错)
{% extends "base.html" %}
{% block title %} Logged out {% endblock %}
{% block content %}
Logged out
You have been sucessfully logged out. You can log-in again
{% endblock %}四、我们需要编写登录成功的页面,这个文件的名称可以自定义,如dashboard.html。我们把他放在templates根目录下,创建一个新的文件夹也可以。代码如下,比较简单,可以进一步扩展。
{% extends "base.html" %}
{% block title %}
Dashboard
{% endblock %}
{% block content %}
Dashboard
Welcome to your dashboard.
{% 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'



