99 lines
2.6 KiB
Plaintext
99 lines
2.6 KiB
Plaintext
---
|
||
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. 最后补三级权限体系(总部/门店/经纪人)
|
||
|