Django 프로젝트 에서 User 데이터 모델 사용 하기

4117 단어 django
Django 도 구 를 통 해 User 데이터 모델 찾기
User 클래스 를 가 져 오 는 가장 좋 은 방법:
# Stock user model definition
>>> from django.contrib.auth import get_user_model
>>> get_user_model()


# When the project has a custom user model definition
>>> from django.contrib.auth import get_user_model
>>> get_user_model()

데이터 모델 에서 settings.AUTH 사용USER_MODEL 외부 키 참조 진행
User 의 ForeignKey,OneToOneKey 또는 ManyToMany Field 에 대한 인용 방식:
from django.conf import settings
from django.db import models

class IceCreamStore(models.Model):

    owner = models.OneToOneField(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=255)

setting.AUTH_USER_MODEL 의 값 이 설정 되면 더 이상 수정 하지 마 십시오.수정 은 데이터베이스 모델 의 대량 수정 과 관련 됩 니 다!
User 의 외부 키 참조 에 get 을 사용 할 수 없습니다.user_model(),순환 을 일 으 킬 수 있 습 니 다.
다음은 잘못된 사용 방법 입 니 다.
# DON'T DO THIS!
from django.db import models
from django.contrib.auth import get_user_model

class IceCreamStore(models.Model):

    # This following line tends to create import loops.
    owner = models.OneToOneField(get_user_model())
    title = models.CharField(max_length=255)

1.5-버 전의 User 데이터 모델 에서 1.5+버 전 으로 이전
참고:Tobias McNulty’s Tutorialdjango-authtool’s Tutorial
Django 1.8 에서 사용자 정의 사용자 항목
관련 패키지:django.authtools,AbstractEmailUser 와 AbstractNamedUser 데이터 모델 이 있 습 니 다.
방식 1:추상 사용자 계승
추가 데이터 항목 만 추가 하면 이 방식 을 선택 하 십시오.이러한 상황 에서 django-authtools 의 본 데이터 모델,폼 과 admin 대상 을 사용 하 는 것 이 가장 빠 르 고 쉬 운 실현 방식 이 며,대부분의 항목 은 이러한 상황 에 부합된다.
예시:
# profiles/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import ugettext_lazy as _

class KarmaUser(AbstractUser):
    karma = models.PositiveIntegerField(verbose_name=_("karma"),
                                        default=0,
                                        blank=True)

다음 설정 파일 에서 설정 합 니 다:
AUTH_USER_MODEL = "profiles.KarmaUser"

방식 2:추상 베이스 사용자 계승
AbstractBaseUser 는 기본 골격 으로 3 개 항목 만 있 습 니 다:password,lastlogin, is_active。다음 과 같은 경우 이 방식 을 선택 하 십시오.
  • 기본 제공 이 필요 없 는 firstname 과 lastname 등 항목
  • 기본 비밀번호 처리 기능 만 사용 하고 싶 습 니 다
  • 관련 데이터 모델 에서 링크 하기
    1.5 버 전 전에 Profile 데이터 모델 을 만 드 는 방식 과 유사 합 니 다.그것 은 다음 과 같은 몇 가지 사용 상황 이 있다.
    상황 1:제3자 가방 만 들 기
  • 이 가방 은 PyPI
  • 에 발 표 됩 니 다.
  • 이 패 키 지 는 모든 사용자 에 게 Strip ID 등
  • 추가 정 보 를 저장 해 야 합 니 다.
    상황 2:내부 프로젝트 수요
  • 사용자 마다 다른 항목 이 필요 합 니 다
  • 이 방식 은 위의 방식 1 과 방식 2 와 함께 사용 할 수 있다
  • 이러한 방식 을 사용 하려 면 서로 다른 데이터 모델 을 서로 다른 Profile 에 정의 해 야 합 니 다.예 를 들 어:
    # profiles/models.py
    
    from django.conf import settings
    from django.db import models
    
    from flavors.models import Flavor
    
    class EaterProfile(models.Model):
    
        # Default user profile
        # If you do this you need to either have a post_save signal or
        # redirect to a profile_edit view on initial login.
        user = models.OneToOneField(settings.AUTH_USER_MODEL)
        favorite_ice_cream = models.ForeignKey(Flavor, null=True, blank=True)
    
    class ScooperProfile(models.Model):
    
        user = models.OneToOneField(settings.AUTH_USER_MODEL)
        scoops_scooped = models.IntegerField(default=0)
    
    class InventorProfile(models.Model)
    
        user = models.OneToOneField(settings.AUTH_USER_MODEL) .
        flavors_invented = models.ManyToManyField(Flavor, null=True, blank=True)

    그 후에 ORM 을 통 해 방문 할 수 있 습 니 다.예 를 들 어user.eaterprofile.favorite_ice_cream.
    주:user.get_profile()Django 1.7 에서 제거 되 었 습 니 다.
    참고 문헌:
    Two Scoops of Django: Best Practices for Django 1.8

    좋은 웹페이지 즐겨찾기