AbstractUser 这个类以及他的常用场景

发布时间 2023-09-12 14:45:27作者: 7dao

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: 用户加入(创建)的时间

常用场景:

  1. 自定义用户模型:如果你需要额外的字段,例如电话号码或生日,你可以继承 AbstractUser 并添加你需要的字段。

    class CustomUser(AbstractUser):
        phone = models.CharField(max_length=20)
    
  2. 修改默认字段: 如果你想修改某个字段的默认值或其他选项,也可以继承 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):这个方法需要在子类中实现,用于在每个请求上执行身份验证。如果身份验证成功,应该返回一个包含 userauth 的二元组。如果身份验证失败,可以返回 None 或抛出一个 exceptions.AuthenticationFailed 异常。

  • authenticate_header(self, request):当身份验证失败并且客户端需要提供凭据时,这个方法返回一个字符串,用于构造 'WWW-Authenticate' 头部。这是一个可选的方法,可以根据需要在子类中实现。

应用场景:

  1. 自定义身份验证:如果 Django REST framework 自带的身份验证方式(如 TokenAuthentication、SessionAuthentication 等)无法满足你的需求,你可以通过继承 BaseAuthentication 类创建自定义的身份验证器。

  2. 权限控制:身份验证器经常与权限类配合使用,以判断已认证的用户是否有权执行特定的操作。

  3. 多身份验证方式支持:在一个项目中,可能会同时存在不同的身份验证方式。例如,API 接口可能使用 TokenAuthentication,而浏览器视图则使用 SessionAuthentication。此时,可以创建多个身份验证器,并在设置中加入到 REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] 列表。

总的来说,你可以通过继承 BaseAuthentication 类并实现相应的方法,以创建能满足你特定需求的自定义身份验证器。