整理笔记

This commit is contained in:
2026-09-03 07:19:12 +08:00
parent 35f5436829
commit c9e5fa2b99
14 changed files with 1933 additions and 2250 deletions

View File

@@ -1,193 +0,0 @@
---
title: CUE + WAV 分割与高质量 MP3 转换
date: 2026-05-20
tags: [audio, cue, wav, mp3, ffmpeg, linux]
---
# CUE + WAV 分割与高质量 MP3 转换
这篇笔记记录如何在命令行下,把一张专辑常见的 `cue + wav` 形式,切分成单曲,并转换成高质量 MP3。
## 一、基本概念
- `cue`:曲目索引与标签信息,记录每首歌的开始时间、标题、歌手等。
- `wav`:整张专辑的无损音频文件。
- 典型场景:一张专辑只有一个大 WAV 文件,加一个 CUE 文件。
目标:
1. 按 CUE 的时间点切分成单轨。
2. 转成高质量 MP3。
3. 尽量保留标题、歌手、专辑等标签。
## 二、推荐工具
在 Ubuntu 上建议安装:
```bash
sudo apt update
sudo apt install cuetools shntool lame ffmpeg
```
说明:
- `cuetools`:提供 `cuebreakpoints`、`cuetag`
- `shntool`:负责按断点切分音频
- `ffmpeg`:负责编码成 MP3
- `lame`:MP3 编码器,ffmpeg 也会调用到它的能力
## 三、按 CUE 切分 WAV
### 方式 1:先切分,再转码
```bash
cuebreakpoints "album.cue" | shnsplit -o wav "album.wav"
```
结果:
- 生成 `01.wav`、`02.wav`、`03.wav` ……
- 每个文件对应 CUE 里的一个曲目
### 注意
- `cue` 文件中引用的 wav 文件名,必须和实际文件名一致。
- 如果文件名不一致,先修正 CUE 里的 `FILE` 行,或把 wav 文件重命名。
- 中文文件名一般没问题,但终端编码和 shell 引号要保持正确。
## 四、转换为高质量 MP3
### 方案 A:VBR 高质量,推荐
```bash
for f in *.wav; do
ffmpeg -y -i "$f" -codec:a libmp3lame -q:a 0 "${f%.wav}.mp3"
done
```
说明:
- `-q:a 0` 表示最高质量的 VBR 档位之一
- 一般适合日常听歌和保留尽可能好的音质
### 方案 B:固定 320k
```bash
for f in *.wav; do
ffmpeg -y -i "$f" -codec:a libmp3lame -b:a 320k "${f%.wav}.mp3"
done
```
说明:
- 码率固定,体积更可预测
- 如果你偏好统一规格,可以选这个
## 五、把 CUE 标签写回 MP3
切分并转码后,可以把 CUE 里的标签批量写进 MP3:
```bash
cuetag "album.cue" *.mp3
```
通常会把以下信息写入:
- 曲名
- 专辑名
- 歌手
- 轨道号
## 六、一键脚本
下面是一个可直接使用的一键脚本:
```bash
#!/usr/bin/env bash
set -euo pipefail
CUE="$1"
WAV="$2"
OUTDIR="${3:-output}"
mkdir -p "$OUTDIR"
cd "$OUTDIR"
cuebreakpoints "$CUE" | shnsplit -o wav "$WAV"
for f in *.wav; do
ffmpeg -y -i "$f" -codec:a libmp3lame -q:a 0 "${f%.wav}.mp3"
done
cuetag "$CUE" *.mp3
```
用法:
```bash
chmod +x split_cue_to_mp3.sh
./split_cue_to_mp3.sh "album.cue" "album.wav"
```
## 七、实战建议
### 1. 先保留无损源文件
MP3 即使是高质量编码,依然是有损格式。建议保留:
- 原始 WAV
- 原始 CUE
- 转换后的 MP3
### 2. 输出目录独立管理
不要直接在源目录操作,建议每张专辑一个输出目录,便于回溯。
### 3. 中文文件名注意引号
所有路径都用双引号包裹:
```bash
"我的专辑.cue"
"我的专辑.wav"
```
### 4. 出现标签错位时先检查 CUE
如果曲名或分轨偏移不对,先检查:
- `INDEX 01` 时间点是否正确
- `FILE` 行是否指向正确的 wav 文件
- wav 是否已经被裁剪过
## 八、常见问题
### 1. cuebreakpoints 报错找不到文件
说明 CUE 中的文件名和实际文件名不一致。
### 2. shnsplit 生成的文件顺序不对
先检查 CUE 时间轴是否写错,或者原始 WAV 是否有静默开头/结尾。
### 3. ffmpeg 转码失败
检查是否安装了 `ffmpeg` 和 `libmp3lame` 支持。
### 4. cuetag 没有写入标签
确认:
- CUE 文件语法正确
- MP3 文件名和轨道对应关系未被破坏
## 九、推荐命令组合
如果只想快速执行,最常用的组合是:
```bash
cuebreakpoints "album.cue" | shnsplit -o wav "album.wav"
for f in *.wav; do ffmpeg -y -i "$f" -codec:a libmp3lame -q:a 0 "${f%.wav}.mp3"; done
cuetag "album.cue" *.mp3
```
## 十、结论
如果目标是“命令行下稳定地把 cue+wav 专辑切成高质量 mp3”,推荐流程是:
1. `cuebreakpoints + shnsplit` 切轨
2. `ffmpeg + libmp3lame -q:a 0` 转码
3. `cuetag` 回写标签
这套组合简单、稳定、可批处理,适合长期使用。

File diff suppressed because one or more lines are too long

View File

@@ -1,222 +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
---
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

View File

@@ -1,98 +0,0 @@
---
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. 最后补三级权限体系(总部/门店/经纪人)