AbstractUser 这个类以及他的常用场景
django自定义用户类引用
引用:
from django.contrib.auth.models import AbstractUser
AbstractUser
是 Django 自带的抽象基础用户模型。它包含了最常见的用户属性,如用户名、密码、邮箱、名字、姓氏、激活状态等,并提供了一些处理用户身份验证和权限的方法。这让开发者可以方便地使用一个完整的用户系统而不需要从零开始。
以下是 AbstractUser
的一些主要字段:
username
: 用户名first_name
和last_name
: 用户的名和姓email
: 用户的电子邮件地址password
: 存储用户的哈希密码groups
: 用户所属的组user_permissions
: 用户特定的权限is_staff
: 布尔字段,表示用户是否可以登录到 admin 站点is_active
: 布尔字段,表示用户账户是否活跃is_superuser
: 布尔字段,表示用户是否有所有权限last_login
: 最后一次登录的时间date_joined
: 用户加入(创建)的时间
常用场景:
-
自定义用户模型:如果你需要额外的字段,例如电话号码或生日,你可以继承
AbstractUser
并添加你需要的字段。class CustomUser(AbstractUser): phone = models.CharField(max_length=20)
-
修改默认字段: 如果你想修改某个字段的默认值或其他选项,也可以继承
AbstractUser
并重新定义该字段。class CustomUser(AbstractUser): email = models.EmailField('email address', unique=True)
在这些情况下,别忘了在 settings.py 中设置 AUTH_USER_MODEL
为你的自定义用户模型。AUTH_USER_MODEL = 'myapp.CustomUser'
DRF权限类引用以及自定义
from rest_framework.authentication import BaseAuthentication
Django REST framework 的 BaseAuthentication
类是所有身份验证器的基础类。身份验证器是用来确定并关联到请求的用户身份的组件。
BaseAuthentication
类定义了一些你可以在自定义身份验证器中覆写的方法:
-
authenticate(self, request)
:这个方法需要在子类中实现,用于在每个请求上执行身份验证。如果身份验证成功,应该返回一个包含user
和auth
的二元组。如果身份验证失败,可以返回None
或抛出一个exceptions.AuthenticationFailed
异常。 -
authenticate_header(self, request)
:当身份验证失败并且客户端需要提供凭据时,这个方法返回一个字符串,用于构造 'WWW-Authenticate' 头部。这是一个可选的方法,可以根据需要在子类中实现。
应用场景:
-
自定义身份验证:如果 Django REST framework 自带的身份验证方式(如 TokenAuthentication、SessionAuthentication 等)无法满足你的需求,你可以通过继承
BaseAuthentication
类创建自定义的身份验证器。 -
权限控制:身份验证器经常与权限类配合使用,以判断已认证的用户是否有权执行特定的操作。
-
多身份验证方式支持:在一个项目中,可能会同时存在不同的身份验证方式。例如,API 接口可能使用 TokenAuthentication,而浏览器视图则使用 SessionAuthentication。此时,可以创建多个身份验证器,并在设置中加入到
REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES']
列表。
总的来说,你可以通过继承 BaseAuthentication
类并实现相应的方法,以创建能满足你特定需求的自定义身份验证器。