gpt4 book ai didi

python - Django - 如何使用自定义模型创建身份验证系统

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:35 25 4
gpt4 key购买 nike

django 默认身份验证系统使用自己的身份验证模型,但我已经创建了自己的模型并且我想要,身份验证过程在那里发生

我的模型是:

class User(models.Model):
Nome = models.CharField(max_length=12)
Sobrenome = models.CharField(max_length=12)
Nickname = models.CharField(max_length=21,unique=True)
Email = models.CharField(max_length=40)
Password = models.CharField(max_length=20)
Created_Account_Date = models.DateTimeField(auto_now=False,auto_now_add=True)
Avatar = models.FileField(blank=True)
Number_Following = models.IntegerField(default=0,null=False)
Number_Followers = models.IntegerField(default=0,null=False)

def __str__(self):
return "%s%s" %("@",self.Nickname)

我想用它来制作 auth 进程,而不是 django 的默认

最佳答案

你绝对应该看看Customizing Authentication在 Django 文档中。

但我会尽力为您分解。您可以跟随并添加您的特定字段:

首先,要创建自定义的User 模型,您需要继承AbstractUserAbstractBaseUser。请记住,前者提供的功能比后者更多,而且需要的定制也更少。因此,如果您对 Django 的身份验证系统不太熟悉,那么我建议您继承 AbstractUser 以避免不必要的自定义。

示例:

假设您想扩展标准用户模型并添加一个 EmailField

#models.py 'users' app
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)

现在我们需要让 Django 知道使用我们全新的 CustomUser 模型。所以在我们的设置文件中,我们可以继续添加:

#settings.py
AUTH_USER_MODEL = 'users.CustomUser'

您可能希望让用户在注册时提供电子邮件地址。为此,您还需要在我们的表单文件中自定义您的 UserCreationForm:

#forms.py
from users.models import CustomUser
from django.contrib.auth.forms import UserCreationForm
class CustomUserCreationForm(UserCreationForm):
email = forms.EmailField(max_length=200)

class Meta:
model = CustomUser
fields = ('username', 'email', 'password1', 'password2')

之后,您需要继续在您的 admin.py 中注册您新创建的 CustomUser 模型。

您很可能需要创建自定义 UserChangeForm。可能还有自定义身份验证后端(例如,如果您希望用户使用电子邮件登录。)但这可能值得单独提出一个新问题。

我强烈建议您阅读 Django 身份验证文档(顶部的链接)。它将为您提供更好的指导,让您根据自己的特定需求进行适当的定制。

或者,如果你现在觉得这太复杂了,你也可以考虑用你需要的自定义字段创建一个单独的模型,然后声明一个 OneToOneField 来链接标准的 User 模型和你的新模型。

祝你好运!

关于python - Django - 如何使用自定义模型创建身份验证系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55667777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com