Django中Auth的多个用户类型

jai*_*ime 14 django django-models django-forms django-allauth

我的网站有两种用户类型,客户端专业版.还有两个"主要模块",一个用于客户购买东西等(主要网站),另一个用于专业人员管理操作.对于auth,我想:

  • 单个"登录"表单,用于检测用户是客户还是专业人员,并将她转发到正确的模块(主站点或管理站点).
  • 两个"注册"表单,一个用于客户,另一个用于专业人员.可能是,该网站会询问用户是否要注册为专业人士或客户,以触发每个案例的正确注册流程.
  • 客户将使用"主站点",不应被授权使用"管理站点".
  • 专业人士将使用"管理站点",但不应授权登录主站点.
  • 专业人士和客户都注册为用户,并共享公共字段,如用户名,电话,电子邮件等...

由于Django不会让我使用两个模型进行身份验证.我创建了自定义模型子类AbstractBaseUser,它作为Client和Professional的基础auth类.

class BaseUser(AbstractBaseUser):
  ...

class Client(BaseUser):
  ...

class Professional(BaseUser):
  ...
Run Code Online (Sandbox Code Playgroud)

我还将AUTH_USER_MODEL设置更改为:

AUTH_USER_MODEL = 'myapp.BaseUser'
Run Code Online (Sandbox Code Playgroud)

我还包括django-allauth来管理用户注册和身份验证.但是现在我被卡住了.我刚开始玩Django/Python,我不知道如何解决这个问题.

似乎没有官方推荐的方法(使用Django 1.5实现多个用户类型).我应该坚持子类化方法,还是应该在文档中指出OnetoOne关系?

一旦我正确设置了模型,我该如何处理这两个注册表单?是否有可能用django-allauth实现这一点,还是我需要手动完成?

据我所知,当注册新用户时,会在User表中创建一个新的基本用户.但由于我将创建用户专业化(客户端或专业版),我应该如何指定我还想在相应的表中创建与客户端相关的数据或专业相关的数据?

我对Django很新,所以任何建议都会有所帮助

Tit*_*s P 8

我认为你做你正在谈论的最简单的方法就是在你的项目中拥有3个应用程序:你的顶级应用程序,一个"专业"应用程序和一个"客户端"应用程序.在顶级应用程序中,您真正需要做的就是为用户提供登录表单和2个链接,一个用于注册为Professional,另一个用于注册为客户端.

在这种情况下,我相信您最容易使用Django的内置权限系统,并将每种类型的用户分配给相应的组(例如专业人员和客户).您可以在视图上使用装饰器,以确保只有特定组的成员才能访问该视图(因为每个组有2个独立的应用程序,您可以为每个组中的所有视图添加装饰器,或者您可以导入Django的授权功能进入你的urls.py并在那里检查,虽然这超出了这个答案的范围).

注册很简单,使用urls.py文件将想要注册的用户转发到正确的应用程序.一旦你这样做,你应该能够在每个应用程序上使用django-allauth注册,允许您创建2种不同类型的用户.确保在注册时,您将它们分配给正确的组成员身份.

至于登录重定向,一旦收到POST数据,我会检查登录的用户类型,并使用它将用户转发到与Professional或Client应用程序一起使用的正确URL.您可以在以下链接中查看登录后重定向用户的想法.

Django - 登录后,将用户重定向到他的自定义页面 - > mysite.com/username

  • 这当然是一种选择,除非你想扩展,否则它不一定是坏的.另一种选择是在单个用户模型中创建所有字段,并使用模型函数来定义哪些字段适用于不同类型的用户.基本上,您不必让您的数据库引擎定义哪些字段不能为空,或限制值或其他任何内容,您可以使Django强制执行完整性并在单个条目中获得更多灵活性模型. (2认同)