我们自己创建用户表通常是这样的:

#这个是我们自己建的用户模型类
class User(models.Model):

username = models.CharField('手机号', max_length=11, unique=True)
password = models.CharField('密码', max_length=150)
address = models.CharFiels('常用地址',max_length=100,blank=True)
email = models.EmailField(_('email address'), blank=True)
is_superuser = models.BooleanField('是否是管理员',default=False)
is_staff = models.BooleanField('是否可以访问admin页面'default=False)
is_active = models.BooleanField('是否是有效用户'default=True)
date_joined = models.DateTimeField('用户创建的时间', default=timezone.now)
last_login = models.DateTimeField('上一次的登录时间', default=timezone.now)

Django内建用户系统官方文档:

​https://docs.djangoproject.com/zh-hans/4.0/topics/auth/​

模型类的位置:from django.contrib.auth.models import User

基本模型操作:

创建普通用户:

from django.contrib.auth.models import User
user=User.objects.create_user(username='zhangsan',password='123456')

创建超级用户:

from django.contrib.auth.models import User
user=User.objects.create_superuser(username='zhangsan',password='123456')

删除用户

from django.contrib.auth.models import User
try:
user = User.objects.get(username='zhangsan')
user.is_active = False #标记当前用户无效
user.save()
print('删除普通用户成功')
except:
print('伤处普通用户失败')

密码校验:

如果用户名密码校验成功则返回对应的user对象,否则返回None

from django.contrib.auth import authenticate
user=authenticate(username=username,password=password)

修改密码:

from django.contrib.auth.models import User
try:
user=User.objects.get(username='zhangsan')
user.set_password('123456')
user.save()
return HttpResponse('密码修改成功')
except:
return HttpResponse('面膜修改失败')

登录状态保持:

from django.contrib.auth import login
#伪代码
def login_view(request):
user=authenticate(username=username,password=password)
login(request,user)

登录状态校验:

例如后台管理的增删改查都是需要校验登录状态的,在云笔记中我们自己定义的校验装饰器,这里则不用

from django.contrib.auth.decorators import login_required
@login_required
def index_view(request):
#该用户必须为用户登录状态下才可以访问
#当前登录用户可通过request.user获取
login_user = request.user
......

登录状态的取消:

from django.contrib.auth import logout
def logout_view(request):
logout(request)

内建用户字表-扩展字段:

方案1:通过建立新表,跟内建表做1对1映射(应用成本高,不推荐)

方案2:继承内建的抽象user模型类

以下三步就是要告诉Django,以后就要用我的这个表替换你系统内置的User表

步骤:
1添加新的应用
2定义模型类,继承AbstractUser
3setting.py中指明AUTH_USER_MODEL='应用名.类名'
注意:此操作要在第一个migrate之前进行

示例:

#1定义模型类
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
phone=models.CharField(max_length=11, default='')

#2在setting里配置AUTH_USER_MODEL='应用名.类名
AUTH_USER_MODEL = 'user.UserInfo'

#3执行新创建项目后的第一个migrate
python manage.py migrate

#4小试牛刀添加用户
from user.models import UserInfo
UserInfo.objects.create_user(username='zhangsan', password='123456',phone='17600588787')