2016-10-16 11 views
0

おそらく非常に基本的な質問です。レガシーデータベースのカスタムモデルを使用してログインdjangoを認証する

Djangoでユーザのログインを認証するために自分のレガシーdbテーブルを使用するにはどうすればよいですか?

私が見つけたすべての方法は本当に混乱しているようです。

「User」ではなく「Persons」データベーステーブルを変更して、Django独自の認証システムを使用したいと考えています。

+0

あなたは(https://docs.djangoproject.com [カスタムUserモデルを指定] Djangoのドキュメントでこれを確認、 'AbstractBaseUser'を拡張' Person'モデルを作成することができます/en/1.10/topics/auth/customizing/#specifying-a-custom-user-model) – ettanany

+0

あなたはそれを拡張する最も無痛で簡単な方法を提案できますか? – whatIf

+0

私の答えを見て、あなたのニーズに合っているかどうか教えてください。 – ettanany

答えて

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 

あなたのsettings.pyファイルにAUTH_USER_MODEL = 'person.Person'を追加する必要があります(私はあなたのアプリケーションの名前があると仮定人)。現在、認証システムではUserというデフォルトモデルの代わりにPersonモデルが使用されます。

詳細について

、このチュートリアルをチェックしExtending Django's built-in User model

関連する問題