Django-Tenants 多租户系统安装与配置指南
前言
Django-Tenants 是一个基于 PostgreSQL 模式(Schema)的多租户解决方案,允许在单个 Django 项目中为多个租户提供服务,同时保持数据隔离。本文将详细介绍如何安装和配置 Django-Tenants 系统。
安装步骤
首先需要安装 Django-Tenants 包:
pip install django-tenants
基础配置
数据库配置
修改 settings.py 中的数据库引擎设置:
DATABASES = {
'default': {
'ENGINE': 'django_tenants.postgresql_backend',
# 其他数据库配置...
}
}
数据库路由
添加租户同步路由:
DATABASE_ROUTERS = (
'django_tenants.routers.TenantSyncRouter',
)
中间件配置
将租户主中间件添加到 MIDDLEWARE 的顶部:
MIDDLEWARE = (
'django_tenants.middleware.main.TenantMainMiddleware',
# 其他中间件...
)
模板上下文处理器
确保 django.template.context_processors.request 在模板上下文处理器中:
TEMPLATES = [
{
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
# 其他处理器...
],
},
},
]
租户和域名模型
创建租户模型
租户模型必须继承自 TenantMixin,可以添加自定义字段:
from django.db import models
from django_tenants.models import TenantMixin, DomainMixin
class Client(TenantMixin):
name = models.CharField(max_length=100)
paid_until = models.DateField()
on_trial = models.BooleanField()
created_on = models.DateField(auto_now_add=True)
auto_create_schema = True # 自动创建模式
class Domain(DomainMixin):
pass
管理后台支持
使用 TenantAdminMixin 注册租户模型:
from django.contrib import admin
from django_tenants.admin import TenantAdminMixin
@admin.register(Client)
class ClientAdmin(TenantAdminMixin, admin.ModelAdmin):
list_display = ('name', 'paid_until')
应用配置
共享和租户应用
配置共享应用和租户特定应用:
SHARED_APPS = (
'django_tenants', # 必需
'customers', # 租户模型所在应用
'django.contrib.contenttypes',
# 其他共享应用...
)
TENANT_APPS = (
'myapp.hotels', # 租户特定应用
'myapp.houses',
)
INSTALLED_APPS = list(SHARED_APPS) + [app for app in TENANT_APPS if app not in SHARED_APPS]
模型设置
指定租户和域名模型位置:
TENANT_MODEL = "customers.Client"
TENANT_DOMAIN_MODEL = "customers.Domain"
初始化迁移
运行共享模式迁移:
python manage.py migrate_schemas --shared
子目录支持(Beta功能)
可以使用子目录而非子域名:
TENANT_SUBFOLDER_PREFIX = "clients"
使用子目录中间件:
MIDDLEWARE = (
'django_tenants.middleware.TenantSubfolderMiddleware',
# 其他中间件...
)
可选配置
公共模式名称
PUBLIC_SCHEMA_NAME = 'public' # 默认值
租户创建设置
TENANT_CREATION_FAKES_MIGRATIONS = False # 是否从模板模式复制
TENANT_BASE_SCHEMA = None # 模板模式名称
租户视图路由
PUBLIC_SCHEMA_URLCONF = 'myproject.urls_public' # 公共模式的URL配置
缓存配置
启用租户感知缓存:
CACHES = {
"default": {
'KEY_FUNCTION': 'django_tenants.cache.make_key',
'REVERSE_KEY_FUNCTION': 'django_tenants.cache.reverse_key',
},
}
最佳实践建议
- 数据库规划:在项目初期就规划好共享应用和租户特定应用
- 性能考虑:对于大型系统,考虑设置
TENANT_CREATION_FAKES_MIGRATIONS以提高租户创建速度 - 安全建议:不要禁用
SKIP_PG_EXTRA_VALIDATION检查,除非你完全理解其影响 - 开发环境:使用子目录功能在开发环境中测试多租户行为
通过以上配置,您已经成功设置了 Django-Tenants 多租户系统。接下来可以开始创建租户和开发租户特定的功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



