auth模块与django的后台管理息息相关
from django.contrib import auth
1 创建管理员
先执行数据库迁移命令 就直接迁移 无需再models中创建多余的表
python3 manage.py makemigrations
python3 manage.py migrate
执行完成之后在迁移的数据库中就可以看到很多张auth开头的表名前缀
使用 python3 manage.py createsuperuser 命令
创建完成过后可以在auth_user 这张表中看到创建的用户
创建完成过后就可以登录啦
http://127.0.0.1:8000/admin
输入创建好的用户名密码就可以登陆啦
2 用户登陆校验
from django.contrib.auth.models import AbstractUser # AbstractUser 就是auth_user这张表 但是前端传过来的是明文的,表中的是密文的,所以无法使用这张表校验
前端传过来的用户名和密码接收 校验用户名和密码是否正确 user_obj = auth.authenticate(request,username=username,password=password) # 会自动帮你去表里面校验用户名和密码,并且在校验之前会自动帮你加盐加密处理然后去表中比对,返回值是用户对象 print(user_obj) # lkk 如果校验不成功 返回None 相当于是 models.User.objects.filter(username=username,password=password).first() 校验正确过后,就要保存用户登陆状态 if user_obj: # 保存用户登陆状态 auth.login(request,user_obj) # 这串代码背后对应的操作 去django.session表中生成一个随机字符串(session),然后也让浏览器保存一份(session) 只要执行了auth.login()方法,可以在任意位置通过request.user获取到当前登陆的数据对象
如果通过这种方法来判断用户是否登陆,有些许不适
可以通过
request.user.is_authenticated来判断用户是否登陆
print(request.user.is_authenticated) # CallableBool(False) 没有登陆
print(request.user.is_authenticated()) # False
方法总结
校验用户名和密码是否正确
res = auth.authenticate(request,username=username,password=password) 返回的是用户对象或者None
request.user.is_authenticated() 判断用户是否登陆 返回True 或者 False
3. 修改密码
修改密码是基于登陆过后才能修改,所以需要用到登陆认证装饰器
auth模块也给你做啦
from django.contrib.auth.decoratora import login_required @login_required(login_url='/login/') # 如果没有登陆 会自动跳转到括号中的指定页面,不写默认跳到一个不知名的url,但是你也没开设该接口 404 @login_required # 全局配置 在settings中配置 LOGIN_URL = '/你指定跳转的url/' # 如果全局配置和局部配置都存在,那么跳转到局部指定的url def set_pwd(request): return render(request,'set_pwd.html') def set_pwd(request): old_password = request.POST.get('old_password') new_password = request.POST.get('new_password') is_right = request.user.check_password(old_password) # True or False if is_right: # 修改密码 request.user.set_password(new_password) # 一定要保存 request.user.save() # 不写则无法修改 return render(request,'sp.html',locals()) 方法总结 request.user.check_password # 查看旧密码是否正确 request.user.set_password # 设置密码 request.user.save() #保存用户信息 from django.contrib.auth.decoratora import login_required 登陆认证装饰器 局部配置 @login_required('/login/') 全局配置 LOGIN_URL = '/login/' ps :全局和局部同时存在,那么局部的作用域大于全局的,优先跳转局部指定的url