【发布时间】:2013-06-01 09:56:48
【问题描述】:
我的网站有两种用户类型,客户和专业。还有两个“主要模块”,一个供客户购买东西等(主站点),另一个供专业人员管理操作。对于身份验证,我想要:
- 一个单一的“登录”表单,用于检测用户是客户还是专业人员,并将她转发到正确的模块(主站点或管理站点)。
- 两种“注册”表格,一种用于客户,另一种用于专业人士。网站可能会询问用户是想注册为专业人士还是客户,以触发每个案例的正确注册流程。
- 客户将使用“主站点”,不应被授权使用“管理站点”。
- 专业人员将使用“管理站点”,但不应被授权登录主站点。
- 专业人士和客户都注册为用户,并共享共同的字段,例如用户名、电话、电子邮件等...
因为 Django 不允许我使用两个模型进行身份验证。我创建了自定义模型子类化 AbstractBaseUser,并将其作为 Client 和 Professional 的基本身份验证类。
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
我还将AUTH_USER_MODEL 设置更改为:
AUTH_USER_MODEL = 'myapp.BaseUser'
我还添加了django-allauth 来管理用户注册和身份验证。但现在我被困住了。我刚开始玩 Django/Python,我不知道如何解决这个问题。
似乎没有官方推荐的方法来做到这一点(Implementing multiple user types with Django 1.5)。我应该坚持子类化方法,还是应该执行docs 中指出的 OnetoOne 关系?
正确设置模型后,我应该如何处理这两个注册表单?是否可以使用 django-allauth 完成此操作,还是我需要手动完成?
据我所知,当注册新用户时,会在 User 表中创建一个新的基本用户。但是由于我将创建用户专业化(客户或专业),我应该如何指定我也想在相应的表中创建客户相关数据或专业相关数据?
我对 Django 很陌生,所以任何建议都会有所帮助
【问题讨论】:
标签: django django-models django-forms django-allauth