Auto-sync: 2026-04-21 20:03
This commit is contained in:
222
Hermes/yunzhi/技术笔记/django-tenants 完整配置指南.md
Normal file
222
Hermes/yunzhi/技术笔记/django-tenants 完整配置指南.md
Normal file
@@ -0,0 +1,222 @@
|
||||
---
|
||||
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
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
---
|
||||
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. 最后补三级权限体系(总部/门店/经纪人)
|
||||
|
||||
Reference in New Issue
Block a user