首页 > 解决方案 > 如何在 Django Rest Framework 中使用 models.py 中定义的用户模型进行身份验证

问题描述

我想做的事

1.引入认证Django Rest Framework

2.使用我在as中定义的User模型进行认证,默认models.Modeladmin-user提供django

版本

django: 3.1

djangorestframework:3.11.1

python: 3.7.6

情况

我正在尝试创建一个每个用户都可以交换他们的项目的应用程序。我Django在服务器端和React客户端使用。

为了引入身份验证和注册,我Usermodels.py. 但是,当我尝试在其中引入这些功能时,Django Rest Framework我注意到我可能无法使用User我定义的来做到这一点,也许我必须使用admin-user django提供。

问题

__首先,我可以使用User我自己定义的模型来介绍身份验证和注册功能吗?__

我发现我可以admin-user自己编辑,所以我编辑了它。它不起作用。老实说,我不明白我是否也可以使用User模型来介绍这些功能。

我想教我如何弄清楚。和我想结合起来的人DjangoReact教我一些实现认证和注册的方法。

非常感谢你。

这是我的User模型。

class User(models.Model):
    username = models.CharField(max_length=150, unique=True)
    email = models.EmailField(max_length=100, unique=True)
    password = models.CharField(max_length=20)
    profile = models.TextField(max_length=800, blank=True, null=True)
    icon = models.ImageField(blank=True, null=True)
    background = models.ImageField(blank=True, null=True)
    login = models.BooleanField(default=False)
    # createdAt, updatedAt は時系列順等に並べたいモデルに付与
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.username

    class Meta:
        db_table = "users"

和自定义管理员用户。

class UserManager(BaseUserManager):
    def create_user(self, username, password=None, **extra_fields):
        if not username:
            raise ValueError("ユーザーネームは必ず必要です。")
        user = self.model(username=username, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, password):
        return self.create_user(username, password)


class User(AbstractBaseUser):
    username = models.CharField(max_length=150, unique=True)
    email = models.EmailField(max_length=100, unique=True)
    profile = models.TextField(max_length=800, blank=True, null=True)
    icon = models.ImageField(blank=True, null=True)
    background = models.ImageField(blank=True, null=True)
    login = models.BooleanField(default=False)
    # createdAt, updatedAt は時系列順等に並べたいモデルに付与
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    USERNAME_FIELD = "username"

    def __str__(self):
        return self.username

    class Meta:
        db_table = "users"

标签: djangoauthenticationdjango-rest-framework

解决方案


首先,为了django使用您的自定义用户模型而不是内置用户模型,您可以告诉django使用什么。

因此,在您的settings.py文件中添加以下内容:

AUTH_USER_MODEL = 'appname.modelname'

前任:

AUTH_USER_MODEL = 'users.CustomUser'

作为参考:https ://testdriven.io/blog/django-custom-user-model/

然后对于自定义身份验证,与 DRF 文档一起使用,如果您有不同的逻辑,编写自定义身份验证很简单:https ://www.django-rest-framework.org/api-guide/authentication/

对于注册,我建议使用dj-rest-authhttps ://github.com/jazzband/dj-rest-auth


推荐阅读