
django-tenants基于PostgreSQL模式的终极多租户解决方案【免费下载链接】django-tenantsDjango tenants using PostgreSQL Schemas项目地址: https://gitcode.com/gh_mirrors/dj/django-tenantsdjango-tenants是一款强大的开源工具它使Django驱动的网站能够通过PostgreSQL模式实现多租户功能是每个软件即服务SaaS网站的关键特性。借助django-tenants您可以在同一项目实例中支持多个客户实现共享数据与租户特定数据的分离并支持租户视图路由。什么是PostgreSQL模式PostgreSQL模式可以看作是操作系统中的目录每个目录模式都有自己的文件集表和对象。这允许在不同模式中使用相同的表名和对象而不会产生冲突。对于模式的准确描述请参阅PostgreSQL官方文档。为什么选择模式实现多租户实现多租户通常有三种解决方案隔离方法独立数据库。每个租户拥有自己的数据库。半隔离方法共享数据库独立模式。所有租户使用一个数据库但每个租户拥有一个模式。共享方法共享数据库共享模式。所有租户共享同一个数据库和模式有一个主租户表其他表都有指向该表的外键。django-tenants采用第二种方法在我们看来这是在简单性和性能之间的理想折衷。简单性几乎不需要更改现有代码即可支持多租户而且只需管理一个数据库。性能利用共享连接、缓冲区和内存。django-tenants的工作原理租户通过其主机名即tenant.domain.com进行识别。此信息存储在public模式的表中。每当有请求时主机名将用于在数据库中匹配租户。如果找到匹配项搜索路径将更新为使用该租户的模式。从现在开始所有查询都将在租户的模式下进行。例如假设您有一个租户customer位于http://customer.example.com。任何传入customer.example.com的请求都将自动使用customer的模式并使租户在请求中可用。如果未找到租户则会引发404错误。这也意味着您应该为主域设置一个租户通常使用public模式。django-tenants的核心功能无限租户支持 每个租户的数据都存储在特定的模式中。使用单个项目实例即可为任意数量的租户提供服务。租户特定和共享应用租户特定应用数据不在租户之间共享。共享应用信息始终可用并在所有租户之间共享。租户视图路由您可以为http://customer.example.com/和http://example.com/设置不同的视图即使Django仅使用主机名后的字符串来识别要提供的视图。便捷的命令行工具django-tenants提供了一系列管理命令帮助您轻松管理租户和模式例如create_tenant创建新租户migrate_schemas为租户迁移数据库模式tenant_command在特定租户上下文中运行命令这些命令位于django_tenants/management/commands/目录下。快速开始使用django-tenants环境要求Django 2如果需要使用Django 1.11或更低版本请使用django-tenants的1.x版本PostgreSQL安装步骤克隆仓库git clone https://gitcode.com/gh_mirrors/dj/django-tenants修改数据库引擎将DATABASE_ENGINE设置更改为DATABASES { default: { ENGINE: django_tenants.postgresql_backend, # 其他配置... } }添加中间件将django_tenants.middleware.main.TenantMainMiddleware添加到MIDDLEWARE的顶部MIDDLEWARE ( django_tenants.middleware.main.TenantMainMiddleware, # 其他中间件... )配置数据库路由器将django_tenants.routers.TenantSyncRouter添加到DATABASE_ROUTERS设置DATABASE_ROUTERS ( django_tenants.routers.TenantSyncRouter, )添加到INSTALLED_APPS将django_tenants添加到INSTALLED_APPS。创建租户模型from django.db import models from django_tenants.models import TenantMixin, DomainMixin class Client(TenantMixin): name models.CharField(max_length100) paid_until models.DateField() on_trial models.BooleanField() created_on models.DateField(auto_now_addTrue) class Domain(DomainMixin): pass运行迁移python manage.py migrate_schemas --shared创建租户from customers.models import Client, Domain # 创建公共租户 tenant Client(schema_nametenant1, nameMy First Tenant, paid_until2014-12-05, on_trialTrue) tenant.save() # 为租户添加一个或多个域 domain Domain() domain.domain tenant.my-domain.com domain.tenant tenant domain.is_primary True domain.save()示例项目django-tenants附带了示例项目您可以在examples/目录中找到它们。这些示例展示了不同场景下的多租户实现包括租户子文件夹教程和多租户类型示例。完整文档本文只是一个简短的设置指南。强烈建议您阅读完整的文档以充分利用django-tenants的强大功能。完整文档可以在项目的docs/目录中找到。总结django-tenants为Django应用提供了一种简单而强大的多租户解决方案利用PostgreSQL的模式功能实现数据隔离。它易于设置几乎不需要更改现有代码同时提供了出色的性能和灵活性。无论您是构建新的SaaS应用还是将现有应用迁移到多租户架构django-tenants都是一个值得考虑的选择。通过使用django-tenants您可以专注于构建出色的应用功能而不必担心多租户数据隔离的复杂性。立即尝试体验这个终极多租户解决方案带来的便利【免费下载链接】django-tenantsDjango tenants using PostgreSQL Schemas项目地址: https://gitcode.com/gh_mirrors/dj/django-tenants创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考