一、定义
Django带有一个用户认证系统。它处理用户账号、组、权限以及基于cookie的用户会话
用户可以直接使用Django自带的用户表
官方文档:https://docs.djangoproject.com/en/2.2/topics/auth/
二、基本字段
模型类位置 from django.contrib.auth.models import User
字段 | 含义 |
---|---|
username | 用户名 |
password | 密码 |
邮箱 | |
first_name | 名 |
last_name | 姓 |
is_superuser | 是否是管理员账号(/admin) |
is_staff | 是否可以访问admin管理界面 |
is_active | 是否是活跃用户,默认True一般不删除用户,而是将用户的is_active设为False |
last_login | 上一次的登陆时间 |
date_joined | 用户创建时间 |
三、创建用户
3.1. 创建普通用户
from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名', password='密码', email='邮箱', ...)
3.2. 创建超级用户
from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用户名', password='密码', email='邮箱', ...)
这里密码没有任何要求,所有要求要自己写用户名和密码必须写
四、删除用户
from django.contrib.auth.models import User
try:
user = User.objects.get(username='用户名')
user.is_active = False # 记录当前用户无效
user.save()
print("删除普通用户成功!")
except:
print("删除普通用户失败!")
五、校验密码
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password)
说明:如果用户名密码校验成功则返回对应的user对象,否则返回None
六、修改密码
from django.contrib.auth.models import User
try:
user = User.objects.get(username='用户名')
user.set_password('新密码')
user.save()
print("修改密码成功!")
except:
print("修改密码失败!")
七、登录状态保持
from django.contrib.auth import login, authenticate
def login_view(request):
user = authenticate(username=username, password=password)
if not user:
return HttpResponse('用户名或密码不对')
else:
# 用户存在,记录登录状态
login(request, user)
八、登录状态校验
from django.contrib.auth.decorators import login_required
@login_required # 需要配置登录地址,settings.py中配置LOGIN_URL = '登录地址'
def login_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模型类
继承内建抽象类
步骤:
- 添加新的应用
- 定义模型类 继承AbstractUser
- setting.py中指明AUTH_USER_MODEL=‘应用名.类名’
注意:
此操作要在第一次Migrate之前进行
示例 —— user/models.py 添加user应用
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
# 定义新字段
phone = models.CharField(max_length=11, default='')
setting.py中添加配置
AUTH_USER_MODEL = 'user.UserInfo'
添加用户
from user.models import UserInfo # 这里可以使用内建表的一切方法
UserInfo.objects.create_user(username='demo', password='123', phone='15611111111')