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)
答案 0 :(得分:1)
您绝对应该看一下Django文档中的Customizing Authentication。
但我会尽力为您分解。您可以遵循并添加您的特定字段:
首先,要创建自定义的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')
然后,您需要继续进行操作,并在CustomUser
中注册新创建的admin.py
模型。
您很可能需要自定义UserChangeForm
。可能还有一个自定义的身份验证后端(例如,如果您希望用户使用电子邮件登录。)但这可能值得一个新的问题。
我强烈建议您阅读Django身份验证文档(顶部的链接)。它会为您提供更好的指导,以根据您的特定需求进行正确的自定义。
或者,如果您现在觉得这太复杂了,还可以考虑使用所需的自定义字段创建一个单独的模型,然后声明一个OneToOneField
以便在标准User
模型和您的新模型。
祝你好运!