使用模式在Django中处理多租户,无需额外的全局状态。
项目描述
使用模式在Django中处理多租户,无需额外的全局状态。
安装
假设你已经安装了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 查看哈希值)