多态用户模型,带有用于公共选项的插件,以及用于创建自己的抽象类和混合类。

django-polymorphic-auth的Python项目详细描述


Build StatusCoverage StatusVersion

概述

提供多态父模型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信号处理程序,它将 为中的每个名称和电子邮件创建超级用户和员工帐户 ADMINSMANAGERS设置,并将凭据写入 sys.stdout(可配置)。

./manage.py createsuperuser说再见!

若要向自定义插件添加支持,请重写 AbstractUser.try_createclassmethod并让它为 来自nameemailkwargs的必需字段。

例如:

# 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字段不区分大小写。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中运行时在两个枚举类之间切换   java如何让PicoContainer启动/停止/处置工厂注入的组件?   带有Recyclerview onClick的java多活动   java如何从TestNG tests和Selenium接口调用默认方法?   java无法在Eclipse3.5.2中折叠注释   RR和SJF CPU调度算法的Java代码   java从属性文件配置记录器   java Notify传输在字符更改后超过20个字节完成   java阵列究竟是如何工作的   java跨类/包维护全局但可变的变量   java向setMessageListener注册侦听器服务   java按钮单击不在片段中工作   java GSSExException:使用spnego在GSSAPI上未指定故障(机制级别:不支持/启用带有HMAC SHA196的加密类型AES256CTS模式)   用java绘制虚线的图形   java从networkdrive启动windows捆绑包使用不包括JRE?   多线程java线程体系结构与应用程序设计