Django-Tenants 多租户系统安装与配置指南

Django-Tenants 多租户系统安装与配置指南

【免费下载链接】django-tenants Django tenants using PostgreSQL Schemas 【免费下载链接】django-tenants 项目地址: https://gitcode.com/gh_mirrors/dj/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',
    },
}

最佳实践建议

  1. 数据库规划:在项目初期就规划好共享应用和租户特定应用
  2. 性能考虑:对于大型系统,考虑设置 TENANT_CREATION_FAKES_MIGRATIONS 以提高租户创建速度
  3. 安全建议:不要禁用 SKIP_PG_EXTRA_VALIDATION 检查,除非你完全理解其影响
  4. 开发环境:使用子目录功能在开发环境中测试多租户行为

通过以上配置,您已经成功设置了 Django-Tenants 多租户系统。接下来可以开始创建租户和开发租户特定的功能。

【免费下载链接】django-tenants Django tenants using PostgreSQL Schemas 【免费下载链接】django-tenants 项目地址: https://gitcode.com/gh_mirrors/dj/django-tenants

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值