0
おそらく非常に基本的な質問です。レガシーデータベースのカスタムモデルを使用してログインdjangoを認証する
Djangoでユーザのログインを認証するために自分のレガシーdbテーブルを使用するにはどうすればよいですか?
私が見つけたすべての方法は本当に混乱しているようです。
「User」ではなく「Persons」データベーステーブルを変更して、Django独自の認証システムを使用したいと考えています。
おそらく非常に基本的な質問です。レガシーデータベースのカスタムモデルを使用してログインdjangoを認証する
Djangoでユーザのログインを認証するために自分のレガシーdbテーブルを使用するにはどうすればよいですか?
私が見つけたすべての方法は本当に混乱しているようです。
「User」ではなく「Persons」データベーステーブルを変更して、Django独自の認証システムを使用したいと考えています。
これは、カスタム認証を実装する例を示します。
人/ 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
あなたのsettings.py
ファイルにAUTH_USER_MODEL = 'person.Person'
を追加する必要があります(私はあなたのアプリケーションの名前があると仮定人)。現在、認証システムではUser
というデフォルトモデルの代わりにPerson
モデルが使用されます。
、このチュートリアルをチェックしExtending Django's built-in User model
あなたは(https://docs.djangoproject.com [カスタムUserモデルを指定] Djangoのドキュメントでこれを確認、 'AbstractBaseUser'を拡張' Person'モデルを作成することができます/en/1.10/topics/auth/customizing/#specifying-a-custom-user-model) – ettanany
あなたはそれを拡張する最も無痛で簡単な方法を提案できますか? – whatIf
私の答えを見て、あなたのニーズに合っているかどうか教えてください。 – ettanany