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

时间:2019-04-13 16:49:58

标签: python django django-models

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)

我想用它来进行身份验证过程,而不是django的默认值

1 个答案:

答案 0 :(得分:1)

您绝对应该看一下Django文档中的Customizing Authentication

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

首先,要创建自定义的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')

然后,您需要继续进行操作,并在CustomUser中注册新创建的admin.py模型。

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

我强烈建议您阅读Django身份验证文档(顶部的链接)。它会为您提供更好的指导,以根据您的特定需求进行正确的自定义。

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

祝你好运!