django - 如何在 Django Rest Framework 中使用 models.py 中定义的用户模型进行身份验证
问题描述
我想做的事
1.引入认证Django Rest Framework
2.使用我在as中定义的User
模型进行认证,默认models.Model
不admin-user
提供django
。
版本
django
: 3.1
djangorestframework
:3.11.1
python
: 3.7.6
情况
我正在尝试创建一个每个用户都可以交换他们的项目的应用程序。我Django
在服务器端和React
客户端使用。
为了引入身份验证和注册,我User
在models.py
. 但是,当我尝试在其中引入这些功能时,Django Rest Framework
我注意到我可能无法使用User
我定义的来做到这一点,也许我必须使用admin-user
django
提供。
问题
__首先,我可以使用User
我自己定义的模型来介绍身份验证和注册功能吗?__
我发现我可以admin-user
自己编辑,所以我编辑了它。它不起作用。老实说,我不明白我是否也可以使用User
模型来介绍这些功能。
我想教我如何弄清楚。和我想结合起来的人Django
,React
教我一些实现认证和注册的方法。
非常感谢你。
这是我的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"
解决方案
首先,为了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-auth
:https ://github.com/jazzband/dj-rest-auth
推荐阅读
- php - 如何使用 pregmatch 验证无字符 /.%\@?在输入字段中,仅 A-Za-z0-9./ 在另一个输入字段中
- flutter - Flutter Admob 与 ios WebView
- html - 具有动态高度的 Flex-wrap
- android - Moshi:将多个 JSON 属性放入一个类的一个字段中
- python - 用于 FTP 下载的 Python 进度条不起作用
- mysql - 子查询返回超过 1 个值。当子查询跟在 =、!=、<、<=、>、>= 之后或当子查询用作表达式时,这是不允许的
- r - 从 R 中 LaTex 格式的分位数回归中获取结果
- c# - 当允许多选时,参数“表达式”必须计算为 IEnumerable
- swift - 如果 `size` 不在任何子类或超类属性中,或者在它之前也没有使用 '_',它是如何被初始化并作为参数接受的?
- security - 如何在activemq中限制端口61614上的HTTP OPTIONS方法?