多态用户模型,带有用于公共选项的插件,以及用于创建自己的抽象类和混合类。
django-polymorphic-auth的Python项目详细描述
概述
提供多态父模型User和多个子模型。
可以在不影响外键的情况下启用和禁用子模型 到父模型,避免复杂的模式和数据 迁徙。
您甚至可以同时激活多个子模型!
工作原理
多态父模型包含 用户模型的django。这是你的外键指向的地方 (通过AUTH_USER_MODEL设置),这允许您避免 更改子模型时的架构迁移。
查看 django-polymorphic 文档以获取有关使此 可能的。
插件
几个子模型也作为usertypeplugins提供给 常见用例(电子邮件登录、用户名登录等),以及 可用于创建的抽象模型和混合类的数目 你自己的插件。
例如:
# myproject/usertypes/foo/models.py from django.utils.translation import ugettext_lazy as _ from polymorphic_auth.models import AbstractUser class FooUser(AbstractUser): foo = models.CharField(unique=True) USERNAME_FIELD = 'foo' class Meta: verbose_name = _('user with foo login') verbose_name_plural = _('users with foo login')
然后将插件添加到INSTALLED_APPS设置并指向 您的模型在POLYMORPHIC_AUTH['DEFAULT_CHILD_MODEL']设置中:
# myproject/settings.py AUTH_USER_MODEL = 'polymorphic_auth.User' INSTALLED_APPS += ('myproject.usertypes.foo', ) POLYMORPHIC_AUTH = {'DEFAULT_CHILD_MODEL': 'foo.FooUser'}
管理员和经理设置
默认应用程序包含一个post_migrate信号处理程序,它将 为中的每个名称和电子邮件创建超级用户和员工帐户 ADMINS和MANAGERS设置,并将凭据写入 sys.stdout(可配置)。
跟./manage.py createsuperuser说再见!
若要向自定义插件添加支持,请重写 AbstractUser.try_createclassmethod并让它为 来自name和emailkwargs的必需字段。
例如:
# myproject/usertypes/foo/models.py import re class FooUser(AbstractUser): ... @classmethod def try_create(self, **kwargs): email = kwargs.get('email', '') kwargs.setdefault('foo', re.sub(r'@.+', '', email)) return super(FooUser, cls).try_create(**kwargs)
管理
如果安装了多个插件,系统将询问您 通过管理员添加新用户时要创建的用户。如果有的话 只安装了一个插件,它会直接把你带到 那个插件的表单。
您可以为您的插件自定义管理类:
# myproject/usertypes/foo/admin.py from myproject.usertypes.foo.forms import FooForm from polymorphic_auth.admin import UserChildAdmin class EmailUserAdmin(UserChildAdmin): # define custom features here
待办事项
- 插件注册系统,而不是硬编码 和检查INSTALLED_APPS。
- 检查所有注册插件的身份验证后端,而不仅仅是 分配给POLYMORPHIC_AUTH['DEFAULT_CHILD_MODEL']的那个。
- 使email字段不区分大小写。