1>引子
我们之前做用户认证是通过取表单数据跟数据库对应表存储的值做对比,通过就返回一个页面,不通过就重定位
到登陆页面等等,如果每个视图函数都写一下,其实冗余代码还是挺多的,当然,你也可以封装成函数,简化代码。
其实Django提供了一套更专业的用户认证组件,原理类似,并且功能也更强大,我们直接用就好了。
先导入模块,from django.contrib import auth
方法介绍:
1.1> authenticate() ,提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数
1.2> login(HttpRequest, user) 该函数接受一个HttpRequest对象,以及一个认证了的User对象,此函数使
用django的session框架给某个已认证的用户附加上session id等信息。
1.3> logout(request) :注销用户,该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求
的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
1.4> user对象的 is_authenticated():如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证
1.5> 创建用户
from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')
1.6> check_password(passwd):用户需要修改密码的时候 首先要让他输入原来的密码 ,如果给定的字符串
通过了密码检查,返回 True
1.7> user.set_password(password=''):使用 set_password() 来修改密码
2>实现基本注册登录验证的例子
3>基于上面的例子,增加重置密码功能,如下
模板层
4>登录验证装饰器
访问每个页面之前都先判断下有没有登录确实有点繁琐,我们可以写个装饰器来解决这个问题
其实Django也提供了一个功能强大的装饰器,直接用就好了
from django.contrib.auth.decorators import login_required
有个配置要改下,setting里面,如下
直接在需要登录验证的视图函数上面加装饰器就行了 @login_required
有个地址跳转的问题,如下,当我没登录时,访问这些需要登录验证的路径时,
查看视图函数,有个地址跳转的path写死了,需优化下
改写如下
其他--小总结