跳转到主要内容

使用模式在Django中处理多租户,无需额外的全局状态。

项目描述

使用模式在Django中处理多租户,无需额外的全局状态。

https://travis-ci.org/charettes/django-tenancy.png?branch=master https://coveralls.io/repos/charettes/django-tenancy/badge.png?branch=master

安装

假设你已经安装了django,第一步是安装django-tenancy

pip install django-tenancy

现在你可以在Django项目中导入tenancy模块。

使用django-tenancy

定义租户模型

租户模型必须是tenancy.models.AbstractTenant的子类。

例如,你的myapp/models.py可能看起来像这样

from tenancy.models import AbstractTenant

class MyTenantModel(AbstractTenant):
   name = models.CharField(max_length=50)
   # other fields
   def natural_key(self):
      return (self.name, )

重要提示:必须使用元组返回的natural_key方法,该元组将用作模型及其数据库表的表前缀。此前缀必须对于租户是唯一的。

声明租户模型

现在你有了租户模型,让我们在项目中的settings.py中声明

TENANCY_TENANT_MODEL = 'myapp.MyTenantModel'

运行数据库同步以创建相应的表

python manage.py syncdb

定义特定于租户的模型

特定于租户的模型必须子类化tenancy.models.TenantModel

例如,每个租户都将有项目和报告。下面是myapp/models.py可能的样子

from tenancy.models import AbstractTenant, TenantModel

class MyTenantModel(AbstractTenant):
   name = models.CharField(max_length=50)
   # other fields
   def natural_key(self):
      return (self.name, )

class Project(TenantModel):
   name = models.CharField(max_length=50)
   description = models.CharField(max_length=300, blank=True, null=True)

class Report(TenantModel):
   name = models.CharField(max_length=50)
   content = models.CharField(max_length=300, blank=True, null=True)

操作定义的模型

你可以像操作任何其他Django模型一样操作租户和特定于租户的模型。

创建租户实例

tenant = MyTenantModel.objects.create("myfirsttenant")

获取特定于租户的模型:for_tenant()

<TenantModel>.for_tenant(<抽象租户具体子类实例>)

TenantModel 包含一个方法,允许您获取特定于租户实例的 AbstractTenantModel。例如

tenant_project = Project.for_tenant(tenant)

创建特定于租户的模型实例

tenant_project.objects.create("myfirsttenant_project")

Python 3.5

Model 对象之间的循环引用问题防止了在租户删除时对特定租户模型进行垃圾回收。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django-tenancy-0.3.tar.gz (21.4 kB 查看哈希值)

上传时间

构建分布

django_tenancy-0.3-py2.py3-none-any.whl (27.9 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面