Django内置了用户认证系统--auth , 默认使用auth-user表来存储用户信息 .
Django的认证同时提供认证和授权,并通常统一称为认证系统,因为这些功能某些地方是耦合的。
一.User对象
User对象是认证系统的核心。它们通常表示与你的站点进行交互的用户,并用于启用限制访问、注册用户信息和给创建者关联内容等。在Django的认证框架中只存在一种类型的用户,因此诸如‘superusers‘或管理员‘staff‘用户只是具有特殊属性集的user对象,而不是不同类型的user对象。
默认user的基本属性有:
- 用户名
- 密码
- 电子邮件
- 名字
- 姓
二 . auth模块
from django.contrib import auth
- auth模块中常用的方法
-
authenticate()
提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。
如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。
authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。
#用法 user = authenticate(username='theuser',password='thepassword')
-
login(HttpRequest, user)
该函数接受一个HttpRequest对象,以及一个经过认证的User对象。
该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。
注意:
只要使用login(request, user_obj)之后,request.user就能拿到当前登录的用户对象。否则request.user得到的是一个匿名 用户对象(AnonymousUser Object)。
- logout(request)
当调用该函数时 , 当前请求的session会全部清除
- is_authenticated()
用来判断当前请求是否通过认证
- create_user()
auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。
from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
-
create_superuser()
创建超级用户
- check_password(raw_password)
检查密码是否正确 , 需要 输入当前用户的密码
-
set_password(raw_password)
更改密码. 更改完需要保存
user_obj.set_password('新密码')
user_obj.save()
三. 扩展auth-user表
在user表中固定的字段很少 , 在项目中没法拿来使用 , 所以需要扩展的auth-user表 。
我们可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。
这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True)
扩展之后 , 需要在setting.py文件中设置
# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"
- 使用Userinfo表
#创建用户:
UserInfo.objects.create_user(username='用户名', password='密码')
在扩展后 , 就要重新在数据库中创建该表 , 不能使用原来的auth-user表.