--- title: django-tenants 完整配置指南 created: 2026-04-21 tags: [django, django-tenants, postgresql, saas, multi-tenant] category: 技术笔记 --- # django-tenants 完整配置指南 ## 一、安装依赖 pip install django-tenants psycopg2-binary django-jazzmin ## 二、项目目录结构 myproject/ ├── config/ │ ├── settings/ │ │ ├── base.py │ │ ├── development.py │ │ └── production.py │ ├── urls.py │ └── wsgi.py ├── apps/ │ ├── tenants/ │ ├── subscription/ │ ├── accounts/ │ ├── listings/ │ ├── clients/ │ └── showings/ ├── manage.py └── requirements.txt ## 三、核心 Model:租户与域名 - Company 继承 TenantMixin - Domain 继承 DomainMixin - 每一个中介公司 = 一个租户 = 一个独立 PostgreSQL Schema - 每个公司可绑定多个域名/子域名 ## 四、Settings 完整配置 关键点: - SHARED_APPS 放公共 Schema 应用 - TENANT_APPS 放租户私有应用 - TENANT_MODEL = "tenants.Company" - TENANT_DOMAIN_MODEL = "tenants.Domain" - DATABASES 使用 django_tenants.postgresql_backend - DATABASE_ROUTERS 使用 TenantSyncRouter - TenantMainMiddleware 必须第一个 - ROOT_URLCONF / PUBLIC_SCHEMA_URLCONF 分离 - AUTH_USER_MODEL = accounts.User ## 五、URL 路由拆分 - config/urls_public.py:公共域名、官网、注册、登录、超级管理后台 - config/urls_tenant.py:租户子域名、租户后台、房源/客源/带看/员工模块 ## 六、自定义 User Model(跨租户关键) - User 继承 AbstractUser - role 支持平台超管、公司管理员、门店经理、资深经纪人、经纪人、实习经纪人 - Branch 作为门店模型 ## 七、初始化与常用命令 - createdb realestate_saas - python manage.py migrate_schemas --shared - python manage.py createsuperuser - python manage.py shell 创建 Company 与 Domain 示例: - schema_name = zuoan - domain = zuoan.localhost - 访问 http://zuoan.localhost:8000/admin/ 进入专属后台 ## 八、本地开发配置(hosts 文件) - 127.0.0.1 localhost - 127.0.0.1 zuoan.localhost - 127.0.0.1 lianhe.localhost - 127.0.0.1 xincheng.localhost 开发环境要点: - ALLOWED_HOSTS 包含 .localhost - 本地不用 HTTPS ## 九、数据隔离验证 使用 schema_context 切换 schema,验证 Listing 等数据互相隔离。 ## 下一步建议 推荐顺序: 1. 先做房源/客源/带看完整数据模型 2. 再做 Django Admin 深度定制(Jazzmin 主题) 3. 最后补三级权限体系(总部/门店/经纪人) --- # 上海房产中介 SaaS 系统规划 ## 一、多租户架构选型 Django 多租户有三种主流方案,针对这个场景推荐独立 Schema 方案,也就是基于 PostgreSQL Schema 隔离的 django-tenants。 | 方案 | 原理 | 优点 | 缺点 | 适用场景 | |---|---|---|---|---| | 共享 Schema | 每张表加 tenant_id 字段 | 简单,运维成本低 | 数据隔离风险高 | 小规模、低安全需求 | | 独立 Schema | PostgreSQL Schema 隔离 | 隔离好,性能佳 | 稍复杂 | 中介 SaaS,推荐 | | 独立数据库 | 每租户独立 DB | 最高隔离 | 运维成本极高 | 超高安全需求 | 推荐使用 django-tenants: pip install django-tenants ## 二、整体系统模块规划 SaaS 平台层: - 租户注册 - 套餐管理 - 计费 - 超级后台 各中介公司 Tenant: - 房源管理 - 客源管理 - 员工 / 权限管理 - 带看管理 - 合同管理 - 报表 / BI 看板 - 渠道推广 - 财务佣金 - 消息 / 通知中心 核心 Django App 拆分: - tenants:租户管理(公共 Schema) - accounts:用户 / 员工 / 角色权限 - listings:房源管理(核心) - clients:客源 / 客户跟进 - showings:带看记录 - contracts:合同管理 - commissions:佣金 / 财务 - reports:数据报表 - notifications:消息通知 - subscription:套餐订阅(公共 Schema) ## 三、房源模块数据模型(核心) Listing 关键字段包括: - 基础信息:title、listing_type、status - 上海地址结构:district、street、community、building、floor、unit - 房屋属性:area、inner_area、layout、orientation、decoration、floor_total - 价格:price、price_unit - 归属:agent、source、exclusive - 证件:certificate_no - 时间:created_at、updated_at ## 四、技术栈推荐 后端: - Django 5.x + DRF - django-tenants - django-guardian - celery + redis - django-filter - PostgreSQL 15+ 前端路径: - 路径 A:Django Admin + 定制,最快上手,适合 MVP - 路径 B:HTMX + Alpine.js + Tailwind,推荐中期方案 - 路径 C:Vue3 / React + DRF,长期推荐 建议:先 A,再 B,最后 C。 ## 五、租户路由设计 通过子域名区分租户: - company-a.yourapp.com - company-b.yourapp.com - admin.yourapp.com 核心设置: - TENANT_MODEL = "tenants.Company" - TENANT_DOMAIN_MODEL = "tenants.Domain" - SHARED_APPS 放公共应用 - TENANT_APPS 放租户私有应用 ## 六、开发阶段规划 Phase 1(1-2 月)MVP: - 租户注册 / 登录 - 房源 CRUD + 图片上传 - 客源基础管理 - Django Admin 后台 Phase 2(2-3 月)核心业务: - 带看流程 - 合同模板 + 生成 - 员工角色权限 - 基础报表 Phase 3(3-4 月)增长功能: - 佣金结算 - 渠道推广(链家 / 安居客对接) - 微信小程序端 - BI 数据看板 Phase 4 商业化: - 套餐 / 计费系统 - 多城市扩展 ## 七、优先推进建议 如果要最快落地,建议优先顺序: 1. django-tenants 完整配置 2. 房源 / 客源 / 带看数据模型 3. Django Admin 深度定制 4. 权限系统设计 5. 前端升级到 HTMX 或 Vue