25.-内建用户系统
一、内建用户系统
定义:Django带有一个用户认证系统,它处理用户账号、组、权限以及基于cookie的用户会话
用户可以直接使用Django自带的用户表
二、基本字段
模型类位置:from django.contrib.auth.models import User
# 对应数据库的auth_user 表
username:用户名
password:密码
email:邮箱
first_name:名
last_name:姓
is_superuser:是否是管理员账号(/admin)
is_staff:是否可以访问admin管理界面
is_active:是否活跃用户,默认True,一般不删除用户,而是将用户的is_active设为False
last_login:上一次的登录时间
data_joined:用户创建的时间
三、基本模型操作-创建用户
导包:from django.contrib.auth.models import User 1.创建普通用户 create_user user = User.objects.create_user(username='',password='',email='',...) 2.创建超级用户 create_superuser user = User.objects.create_superuser(username='',password='',email='',...)
四、基本模型操作-删除用户
try: user = User.objects.get(username = '用户名') user.is_active = False #记录当前用户无效 user.save() pritn('删除普通用户成功') except: pritn('删除普通通过失败')
五、基本模型操作-校验密码
from django.contrib.auth import authenticate user = authenticate(username=username,password=password) #如果用户名密码校验成功则返回对应的user对象,否则返回None
六、基本模型操作-修改密码
try: user = User.objects.get(username=username) user.set_password('password') user.save() return HttpResponse('修改密码成功') except: return HttpResponse('修改密码失败')
七、基本模型操作-登录状态保持
from django.contrib.auth import login rom django.contrib.auth import authenticate def login_view(request): user = authenticate(username=username,password=password) if user is not None: login(request,user) return HttpResponse('登录状态成功') return HttpResponse('登录状态失败')
八、基本模型操作-登录状态校验
from django.contrib.auth.decorators import login_required @login_required def index_view(request): #该视图必须为用户登录状态才可访问 #当前登录用户可以直接通过request.user获取,不走session获取 login_user = request.user #登录状态校验失败对应的跳转地址需要在settings.py配置LOGIN_URL = '登录失败要跳转的地址'
九、基本模型操作-登录状态取消
from django.contrib.auth import logout def logout_view(request): logout(request)
十、内建用户表-扩展字段
方案1:通过建立新表,跟内建表1对1映射
方案2:继承内建的抽象user模型类,创建一个新的user表完全继承内建user模型类全部属性,将内建user模型类的数据初始化到新的user表,并且指明应用新的user表,不再用内建用户系统的user表
1.定义模型类继承AbstractUser
2.settings.py中指明AUTH_USER_MODEL = '应用名.类名'
PS:此操作要在第一次Migrate前进行,因为第一次migrate执行了,内建系统的user表就已经初始化数据了
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): # 只定义了一个phone字段 # 因为继承了AbstractUser,migrate的时候,内建系统user表的基础数据会同步初始化到数据库 phone = models.IntegerField('手机号', max_length=11, default='')
PS:操作该用户表 的方式 要完全按照内建用户系统的方法
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)