【问题标题】:Custom User Authentication using DRF使用 DRF 的自定义用户身份验证
【发布时间】:2026-01-12 07:20:05
【问题描述】:

想用 Django 创建一个 Web RESTful API。为此,我使用Django REST Framework

使用自定义用户模型(AbstractBaseUser 子类化)公开要使用的端点获得身份验证的必要步骤是什么?

【问题讨论】:

  • 你可以在这里找到很多资源来获得更精确的想法:django-rest-framework.org/topics/api-clients/#authentication
  • @TimothéDelion 我没有详细说明的原因不仅是因为文档没有分享太多关于此的信息,而且因为它变得更像与 Django 相关的相同类型的问题.我看到了这个问题及其答案的潜力。

标签: python django authentication django-rest-framework


【解决方案1】:

1。创建自定义用户模型

Specifying a custom user model 的文档很好。

在我们的 models.py 中,导入 AbstractBaseUserBaseUserManager

然后,创建你的类,例如,

class Profiles(AbstractBaseUser):
    userId = models.CharField(max_length=36, unique= True)
    username = models.CharField(max_lenght=20)
    password = models.CharField(max_lenght=256)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    ...

这里设置USERNAME_FIELDREQUIRED_FIELDS很重要,定义登录时哪些字段是重要的。

同样在您的自定义用户模型类中,您必须创建两个处理权限所需的函数,即has_perm()has_module_perms()


2。创建自定义用户管理器

现在下一步是创建一个Custom User Manager,这是 Django 推荐的。

所以我们创建一个类

class ProfilesManager(BaseUserManager):
    ...

在该类中,需要重写两个方法,即create_user()create_superuser(),分别定义创建用户和创建超级用户时发生的情况。

然后,我们需要用一个objects参数告诉Profiles类这个ProfilesManager类在哪里。

class Profiles(AbstractBaseUser):
    userId = models.CharField(max_length=36, unique= True)
    email = models.CharField(max_lenght=20)
    password = models.CharField(max_lenght=256)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    ...

    USERNAME_FIELDS = 'userId'
    REQUIRED_FIELDS = ['email']

    objects = ProfilesManager()

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

3。设置用户模型

转到您的 settings.py 并添加一个 AUTH_USER_MODEL 属性,指定 Django 应该使用哪个用户模型。

AUTH_USER_MODEL = 'appName.Profiles'

4。进行迁移

要提交上面所做的更改,必须通过运行 make the migrations

python manage.py makemigrations

5。从 REST API 注册用户

既然我们已经创建了模型,那么我们只需要创建serializersviews 和url。

【讨论】:

    最近更新 更多