Skip to main content
 首页 » 编程设计

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

2024年11月24日32emanlee

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 模型,您需要继承AbstractUser 或AbstractBaseUser。请记住,前者提供的功能比后者更多,而且需要的定制也更少。因此,如果您对 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 模型和你的新模型。

祝你好运!