이 주제에 대한 내 원래 질문 의 업데이트 된 버전 이지만 Django가 사용자 및 인증을 처리하는 방식이 변경됨에 따라 다시 요청할 가치가 있습니다.
저는 매우 다른 두 종류의 사용자가있는 웹 사이트에서 작업 Customers
하고 Store Owners
있습니다. 둘 다 사이트에 등록되지만 기능이 매우 다릅니다. Customers
프로필 하나만 있으면 좋아하는 매장에서 쇼핑 할 수 있습니다. Store Owners
하나의 계정이 있지만 여러 상점에 액세스 할 수 있으며 각 상점은 여러 Store Owners
.
모델의 정확한 세부 사항은 중요하지 않지만 두 유형의 사용자는 매우 다른 필드가 필요합니다. 모델은 이상적으로 다음과 같습니다.
Customer
email (username)
password
name
address
time_zone
preferred_shipping
favorite_stores (many-to-many field)
...
Store Owner
email (username)
password
name
balance
stores_owned (many-to-many field on Stores)
stores_managed (many-to-many field on Stores)
...
장고 가난한 사용자 정의 사용자 지원을했을 때 원래, 나는했다 UserProfile
A를 몇 가지 추가 필드가 클래스 OneToOne
에를 User
다음 추가 Customer
하고 StoreOwner
있었다 클래스 OneToOne
에 UserProfile
. 이것은 잘 작동하지 않았습니다.
Django 1.5 / 1.6의 변경 사항을 감안할 때 이것을 구성하는 가장 좋은 방법을 찾으려고 노력하고 있습니다. 지금은 다음이 있습니다.
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
하지만 두 가지 유형의 사용자가 있기 때문에 AUTH_USER_MODEL
그중 하나만 설정할 수는 없습니다 .
사용자 인증, 사용자 생성 또는 관리자에 문제를 일으키지 않고 필드가 다른 두 가지 유형의 사용자를 가질 수 있도록이를 구성하는 가장 좋은 방법은 무엇입니까?
또한, 내가 어떻게이 사용자가 혼자 여부를 로그인에서 말할 수있을 것이다 CustomerUser
또는를 StoreOwnerUser
?
사용자 유형에 공통적 인 기능과 비정상적인 기능이있는 것 같습니다. Django의 기본 사용자 모델이 기본적으로 지원하지 않는 일반적인 기능이 사용자 유형에있는 경우이를 직접 하위 클래스 화해야합니다.
사용자 유형에 일반적이지 않은 추가 기능을 추가하는 것은 서브 클래 싱이 아니라 프로필을 사용하는 것이 가장 좋습니다. 내 근거는 이러한 사용자 유형에 대한 인증이 근본적으로 변경되지 않고 사용자 유형에 따라 사용자에 대한 세부 정보가 변경되기 때문입니다. 이를 수용하기 위해 이러한 세부 정보로 별도의 모델을 만들고 User 클래스를 OneToOne / ForeignKey 관계로 참조합니다 (디자인에 따라 다름).
사용자 생성 프로세스를 수정하여 어떤 유형의 사용자 유형이어야하는지 식별하고 관련 OneToOneField / ForeignKey (디자인에 따라 다름)를 적절한 고객 유형 모델로 설정할 수 있습니다.
이렇게하면 AUTH_USER_MODEL이 하나만 있어야하며 다양한 고객 유형에 대한 세부 정보를 처리 할 수 있어야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다