使用模式在django中处理多租户,而不使用额外的全局状态。

django-tenanc的Python项目详细描述


使用模式在django中处理多租户,而不使用额外的全局状态。

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

安装

假设您已经安装了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对象之间循环引用的问题防止了垃圾 租户删除时租户特定模型的集合。

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

推荐PyPI第三方库


热门话题
playframework Play Framework 2.5表单对象bean(Java)中的依赖项注入   java从javascript触发小程序按钮   JavaGWT:如何创建我自己的异步方法?   对于JTA事务类型,java JPA更改不会持久化   java如何使用预定义的甲板类制作Black Jack游戏   带有数组的java HashMap find()   从Java中的另一个类接收对象数组的参数?   java IntelliJ错误:Scala 145,错误:scalac:找不到Scala编译器JAR   java Eclipse 404请求的资源不可用   java Chuck没有界限   java阅读行每隔一行跳过一行   java如何访问我的EAR部署信息   Java中的正则表达式,其中执行搜索的文本是动态变化的   java我需要优化BigInteger的toString()方法   java Google Map Api V2,自定义路线标记   java如何在Java8中与LocalDate实现更少的需求和更高的质量   EclipseUML插件生成Java源代码   将数据库列绑定到java jComboBox和JList   java如何将两个图像合并为PDF