Auth 认证模块
1、什么是auth认证
Auth模块是Django自带的宇哥用户认证模块,里面包括:用户认证,用户登录,用户认证,注销,修改密码等功能。
它内置统一的认证体系--auth:它默认使用auth_user 表来存储用户数据2、怎么用auth认证
from django.contrib import auth
2.1 authenticate()
提供用户认证功能,及用户名和密码是否争取。需要username,password两个关键字参数
- 如果认证成功,返回一个User对象
- 如果认证成功,会在对象上设置一个标识来给后端,已经认证该用户,且后续认证过程是需要的
用法
user = authenticate(username='usernamer',password='password')
2.2 login(HttpRequest,user)
- 该函数接受一个HttpResponse对象,以及会经过认证的User对象
- 该函数实现一个用户登录的功能,它的本质上会在后端生成相关的session
用法:
form django.contrib import authdef auth_login(request): if request.method =='POST': username = request.POST.get('username') password = request.POST.get('password') # 认证用户输入的用户名和密码是否正确 user_obj = auth.authenticate(username=username,password=password) if user_obj: # 记录用户的状态,一旦认证成功可以在任何地方通过request.user来获取当前的登录的用户 # request.senssion['name']='jasong' auth.login(request,user_obj) # 内部自动生成一个相关的session值,把用户信息放入到session中 return HttpResponse('login successfully') return render(request,'auth_log.html')
- 上面的登录功能的亮点
# 只要登录成功执行了 auth.login(request,user)# 之后再任何视图函数中都可以通过request.user 获取当前用户对象# 当没有执行auth.login, request.user打印出来的都是匿名用户# 如何判断用户是否通过auth.login登录?# request.auth.is_auth
2.3 logout(request)
def logout(request): auth.logout(request) return HttpResponse('ok')
2.4 装饰器校验是否登录成功及跳转
- 局部装饰器
from django.contrib.auth.decorators import login_required@login_required(login_url='/auth_login/') # 局部配置def auth_home(request): return HttpResponse('home必须登录才能访问')
- 全局装饰器
# 在setting配置文件中指定auth登录不合法的统一跳转路径LOGING_URL = '/login/' # 既可以局部配置,也可以全局配置@login_requireddef auth_home(request): return HttpRespionse('ok')
2.5 auth_user表添加数据
from django.contrib.auth.models import Userdef register(request): User.objects.create() # 不能使用,这个产生的密码是名文 User.objects.createuser() # 创建普通用户 user.objects.createsuperuser() # 创建超级用户
2.6 校验密码、修改密码
def set_password(request): old_password = request.POST.get(old_password) new_password = request.POST.get(new_password) # 校验输入的旧密码是否与现有密码一致 is_res = request.user.check_password(old_password) if is_res: # 修改密码为新密码 request.user.set_password('new_password') # 下面的保存操作千万不能忘记 request.user.save() return HttpResoponse('ok')
2.7 自定义模型表应用auth功能
一对一关联
from dajango.contrib.auth.model import Userclass UserDetail(models.Model): phone = models.Charfield(max_length=11) user = models.OneToOneField(to=User)
面向对象继承
from django.contrib.auth.models import User,AbstractUserclass UserInfo(abstractUser): phone = models.Charfield(maxlength=32)# 需要在settings文件中指定不再使用auth_user表,而是使用我自己创建的user_infoAUTH_USER_MODEL = 'app名.models里面对应的模型表名'"""自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现"""