auth介绍
auth模块可以帮助我们很快的搭建用户相关的功能 注册登录修改密码等
也可以使用该模块设置django管理员账号密码(django自带一个admin路由,需要我们提供管理员账号和密码)
auth自带一个auth_user数据表 当你执行过数据库迁移命令后自动创建。默认也有很多字段。
有些字段的含义如下:
- password:密文的密码
- last_login:上次登录时间
- is_superuser:是管理员就存1,普通用户就存0
- username:用户名
- data_joined:注册时间
如何创造管理员
在pycharm命令行中执行
python3.8 manage.py createsuperuser
# 然后会提示我们输入用户名,邮箱(选填),密码等信息,依次输入即可后。
# auth_user表中就会添加一条数据,这条数据就是管理员用户信息。
基于auth模块完成注册
如果想要使用auth相关操作必须导入模块
from django.contrib.auth.models import User
# 导入auth相关的表 不导入的话 models找不到这个表
from django.contrib import auth
# 导入该模块
1.验证账号是否已存在
user_obj = User.objects.filter(username=username)
.first()
# 常规方法 查询该表中是否有该账户 有了则返回用户名已存在
2.通过校验录入数据
User.objects.create_user(username=username, password=password)
# 表名.objects.create_user方法 把需要录入的数据放进去
# 必须要用create_user方法
# 通过这个方法录入的密码才会自动加密
基于auth模块完成登录
from django.contrib.auth.models import User
# 导入auth相关的表 不导入的话 models找不到这个表
from django.contrib import auth
# 导入该模块
1.判断用户名是否存在
user_obj = User.objects.filter(username=username)
.first()
# 常规方法 查询该表中是否有该账户 有了则进行下面操作 没有则返回用户名错误
2.判断账号密码是否正确
user_obj = auth.authenticate(request,username=username,
password=password)
# 必须使用auth模块方法,如果用户名和密码正确则返回 用户对象
# 用户名或密码错误的话返回none
3.用户名密码正确 返回 session给客户端
auth.login(request,user_obj)
# 会自动操作django session表
# 登录成功
4.获取已登录后对象数据
user_obj = request.user
判断用户是否登录
后端:
判断用户是否登录
res = request.user.is_authenticated
# 如果已登录返回true 未登录则返回false
前端:
{% if request.user.is_authenticated %}
# 已登录则结果未true 未登录则返回false
# 如果是已登录则展示用户名
<p>{{ request.user.username }}</p>
{% else %}
<a href=''>登录</a>
<a href=''>注册</a>
{% endif %}
校验是否登录装饰器
直接导入装饰器即可不用自己写
from django.contrib.auth.decorators import login_required
# 导入校验用户是否登录装饰器
@login_required(login_url='/login/')
def home(request):
pass
# 直接装上,并手动设置 为登录跳转到哪个路由
全局配置未登录跳转路由地址
在配置文件中添加代码
LOGIN_URL = '/login/'
设置好以后再使用这个装饰器就不用单独设定路由了
@login_required
即可
基于auth模块完成修改密码
1.先校验原密码是否正确(必须是用户已登录)
request.user 可以获取用户对象
res = request.user.check_password(原密码)
# 如果原密码正确 返回true 不正确返回 false
2.原密码正确后修改为新密码
request.user.set_password(新密码)
request.user.save()
# 修改后必须要保存 所有2个代码都要执行 这样就自动在表格中完成修改
基于auth模块完成退出登录
@login_required(login_url='/login/')
def logout(request):
auth.logout(request)
# 执行auth模块中.logout方法即可
# 会自动退出当前用户,并删除session 完成注销登录
扩展auth_user表
django提供给我们的auth模块固然很好用,但是auth_user表中的字段定死了,显然无法满足我们的业务需求,实际上考虑到这个,我们也可以对auth_user进行改造。
查看源码,User模型类实际上里面什么都没写,而是继承了AbstractUser,这个模型类中定义了我们上文提到的字段。所以我们想要拓展表,只需要继承AbstractUser创建一个模型表,添加我们想要添加的字段即可。
系统自带的auth_user表格中 没有手机号 个人信息等字段
我们如何在该表格基础上添加字段呢
替换auth_user表
我们自己在模型层编写一个表,然后继承auth_user的方法和原有字段
模型层编写模型类继承AbstractUser
from django.contrib.auth.models import AbstractUser
# 一定要继承这个模块 否则无效
第一步:
class UserInfo(AbstractUser):
# 然后在里面添加原本表中没有的字段即可
phone = username = models.CharField(max_length=16,null=True,default='未填写')
desc = models.TextField(null=True,default='空')
第二步:
设置完自己的表后 再配置文件中要声明替换关系
setting.py中
AUTH_USER_MODEL = 'app01.UserInfo'
ps:替换还有一个前提 就是数据库迁移没有执行过,必须是全新的数据库
标签:登录,request,auth,认证,user,模块,login
From: https://www.cnblogs.com/moongodnnn/p/17011142.html