jdo*_*dot 11 python django django-models django-users django-1.6
请注意 - 这是关于此主题的原始问题的更新版本,但值得再次询问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)
...
Run Code Online (Sandbox Code Playgroud)
原来,当Django的有穷自定义用户的支持,我有一个UserProfile用一个有些额外的字段级OneToOne上User,再附加Customer和StoreOwner那名课OneToOne上UserProfile.这不是很好.
鉴于Django 1.5/1.6的变化,我试图想出最好的结构方法.现在,我有以下内容:
class CustomerUser(AbstractBaseUser):
...
class StoreOwnerUser(AbstractBaseUser):
...
Run Code Online (Sandbox Code Playgroud)
但是因为有两种类型的用户,我不能AUTH_USER_MODEL只设置其中一种.
构造这个的最佳方法是什么,以便我可以有两个不同类型的用户使用不同的字段,而不会在用户身份验证,用户创建或管理员方面造成任何问题?
另外,我怎样才能从登录单独告诉该用户是a CustomerUser还是StoreOwnerUser?
您的用户类型似乎有一些常见功能和不常见的功能.如果您的用户类型中存在Django的默认用户模型不支持开箱即用的常见功能,则应直接对其进行子类化.
为用户类型添加额外的,不常见的功能最好不要通过子类化,而是使用配置文件.我的理由是因为您对这些用户类型的身份验证没有根本改变,但有关用户的详细信息取决于用户的类型.为了适应这种情况,您可以创建一个包含这些详细信息的单独模型,并将您的User类引用为OneToOne/ForeignKey关系(取决于您的设计).
您可以对用户创建过程进行修改,以确定应该是哪种用户类型,并将其关联的OneToOneField/ForeignKey(取决于您的设计)设置为适当的客户类型模型.
通过这种方式,您应该只有一个AUTH_USER_MODEL,并且您应该能够处理不同客户类型的详细信息.
| 归档时间: |
|
| 查看次数: |
6470 次 |
| 最近记录: |