Files
diary-family/README.md

206 lines
4.5 KiB
Markdown
Raw Normal View History

2026-01-04 19:21:52 +08:00
# 家庭日报系统
专注于家庭生活的轻量级日报系统使用Django框架开发。
2026-01-04 19:21:52 +08:00
## 功能特性
2026-01-04 19:21:52 +08:00
- 阅读记录管理
- 感悟记录管理
- 家庭事项管理
- 今日计划管理
- 报告生成
- 邮件发送
2026-01-04 19:21:52 +08:00
## 技术栈
2026-01-04 19:21:52 +08:00
- Python 3.10+
- Django 4.2+
- Bootstrap 5
- SQLite开发环境
- PostgreSQL/MySQL生产环境
- Gunicorn + Nginx生产部署
2026-01-04 19:21:52 +08:00
## 快速开始
2026-01-04 19:21:52 +08:00
### 安装依赖
```bash
pip install -r requirements.txt
```
### 运行开发服务器
2026-01-04 19:21:52 +08:00
```bash
python manage.py runserver
```
### 访问系统
打开浏览器访问http://127.0.0.1:8000
2026-01-04 19:21:52 +08:00
## 数据库迁移指南
2026-01-04 19:21:52 +08:00
### 基本迁移流程
2026-01-04 19:21:52 +08:00
1. 生成迁移文件:
```bash
python manage.py makemigrations
```
2026-01-05 21:33:18 +08:00
2. 查看迁移文件内容(重要!):
```bash
cat core/migrations/000x_xxx.py
```
2026-01-05 21:33:18 +08:00
3. 应用迁移:
```bash
python manage.py migrate
```
2026-01-05 21:33:18 +08:00
### 当数据库有数据时增加字段
2026-01-05 21:33:18 +08:00
#### 问题说明
2026-01-05 21:33:18 +08:00
当数据库中已有数据时通过Django的migrate命令增加新字段**不会删除原有数据**,但需要注意以下几点:
2026-01-05 21:33:18 +08:00
1. 如果新字段设置为**非空**`null=False, blank=False`),则必须提供默认值,否则迁移会失败
2. 如果新字段设置为**可空**`null=True, blank=True`则迁移会自动执行原有记录的新字段值为NULL
2026-01-05 21:33:18 +08:00
#### 正确部署流程
2026-01-05 21:33:18 +08:00
1. **在开发环境测试**
- 首先在开发环境生成迁移文件
- 检查迁移文件内容,确保:
- 新字段设置为可空(`null=True, blank=True`),或者
- 新字段提供了合理的默认值
- 在开发环境执行迁移,测试功能是否正常
2026-01-05 21:33:18 +08:00
2. **备份生产数据库**(重要!):
```bash
# PostgreSQL示例
pg_dump -U username -d dbname > backup_$(date +%Y%m%d_%H%M%S).sql
# MySQL示例
mysqldump -u username -p dbname > backup_$(date +%Y%m%d_%H%M%S).sql
```
2026-01-05 21:33:18 +08:00
3. **在生产环境执行迁移**
```bash
# 进入项目目录
cd /path/to/diary-family
# 激活虚拟环境
source venv/bin/activate
# 生成迁移文件(如果在开发环境已生成,可跳过)
python manage.py makemigrations
# 应用迁移
python manage.py migrate
```
2026-01-05 21:33:18 +08:00
4. **验证迁移结果**
- 检查应用是否正常运行
- 验证新功能是否可用
- 检查数据是否完整
2026-01-05 21:33:18 +08:00
#### 示例增加阅读笔记note字段
2026-01-05 21:33:18 +08:00
1. 在模型中添加字段(`core/models.py`
```python
# 正确的做法:设置为可空字段
note = models.TextField(blank=True, null=True, verbose_name="阅读笔记")
# 或者:提供默认值
note = models.TextField(default="", blank=True, verbose_name="阅读笔记")
```
2026-01-05 21:33:18 +08:00
2. 生成迁移文件:
```bash
python manage.py makemigrations
```
2026-01-05 21:33:18 +08:00
3. 检查迁移文件,确保新字段设置正确:
```python
# 迁移文件示例0003_readingrecord_note.py
class Migration(migrations.Migration):
dependencies = [
('core', '0002_xxx'),
]
operations = [
migrations.AddField(
model_name='readingrecord',
name='note',
field=models.TextField(blank=True, null=True, verbose_name='阅读笔记'),
),
]
```
2026-01-05 21:33:18 +08:00
4. 应用迁移:
```bash
python manage.py migrate
```
2026-01-05 21:33:18 +08:00
## 生产部署
2026-01-04 19:21:52 +08:00
### 使用Gunicorn + Nginx
2026-01-04 19:21:52 +08:00
1. 安装Gunicorn
```bash
pip install gunicorn
```
2026-01-04 19:21:52 +08:00
2. 启动Gunicorn
2026-01-04 19:21:52 +08:00
```bash
gunicorn diary_family.wsgi:application --bind 0.0.0.0:8000
2026-01-04 19:21:52 +08:00
```
3. 配置Nginx`/etc/nginx/sites-available/diary-family`
```nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /path/to/diary-family/static/;
}
location /media/ {
alias /path/to/diary-family/media/;
}
}
```
2026-01-04 19:21:52 +08:00
4. 启用Nginx配置
```bash
ln -s /etc/nginx/sites-available/diary-family /etc/nginx/sites-enabled/
systemctl restart nginx
```
2026-01-04 19:21:52 +08:00
## 系统配置
2026-01-04 19:21:52 +08:00
在系统配置页面可以设置:
- SMTP服务器信息
- 邮件发送时间
- 收件人邮箱
2026-01-04 19:21:52 +08:00
## 注意事项
2026-01-04 19:21:52 +08:00
1. 定期备份数据库
2. 生产环境建议使用PostgreSQL或MySQL数据库
3. 定期清理过期数据
4. 保持依赖包更新
2026-01-04 19:21:52 +08:00
## 许可证
2026-01-04 19:21:52 +08:00
MIT License