Loading

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:操作该用户表 的方式 要完全按照内建用户系统的方法

posted @ 2022-01-12 12:37  木子七  阅读(36)  评论(0编辑  收藏  举报