使用模式在django中处理多租户,而不使用额外的全局状态。
django-tenanc的Python项目详细描述
使用模式在django中处理多租户,而不使用额外的全局状态。
安装
假设您已经安装了django,第一步是安装 django租赁:
pip install django-tenancy
现在可以在django项目中导入tenancy模块。
使用django租赁
定义租户模型
租户模型必须是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>;。对于租户(<;AbTractTenantContentSubClass实例>;)
TenantModel附带了一个方法,该方法允许您获取 AbstractTenantModel对于给定的租户实例。例如:
tenant_project = Project.for_tenant(tenant)
创建特定于租户的模型实例
tenant_project.objects.create("myfirsttenant_project")
Python3.5
Model对象之间循环引用的问题防止了垃圾 租户删除时租户特定模型的集合。