使用旧数据库中的自定义模型来验证登录django

时间:2016-10-16 09:18:47

标签: django django-models django-forms

可能是一个非常基本的问题。

如何使用我自己的旧版db表来验证Django中用户的登录?

我发现的所有方法看起来都很混乱。

我想使用Django自己的身份验证系统修改'Persons'数据库表而不是'User'。

1 个答案:

答案 0 :(得分:0)

这是实现自定义身份验证的示例:

<强>人/ models.py:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models


class PersonManager(BaseUserManager):
    def create_user(self, email, password=None, **kwargs):
        if not email:
            raise ValueError('Users must have a valid email address.')
        if not kwargs.get('username'):
            raise ValueError('Users must have a valid username.')
        person = self.model(
            email=self.normalize_email(email), username=kwargs.get('username')
        )
        person.set_password(password)
        person.save()
        return person

    def create_superuser(self, email, password, **kwargs):
        person = self.create_user(email, password, **kwargs)

        person.is_superuser = True
        person.save()

        return person


class Person(AbstractBaseUser):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=40, unique=True)
    first_name = models.CharField(max_length=40, blank=True)
    last_name = models.CharField(max_length=40, blank=True)

    # You may need to add more fields

    is_superuser = models.BooleanField(default=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    objects = PersonManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    def __str__(self):
        return self.email

    def get_full_name(self):
        return '{} {}'.format(self.first_name, self.last_name)

    def get_short_name(self):
        return self.first_name

您需要将AUTH_USER_MODEL = 'person.Person'添加到settings.py文件中(我认为您的应用名称是人物)。现在,您的身份验证系统将使用Person模型而不是默认的User模型。

有关详细信息,请查看本教程Extending Django's built-in User model