Files
diary-family/README.md

206 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 家庭日报系统
专注于家庭生活的轻量级日报系统使用Django框架开发。
## 功能特性
- 阅读记录管理
- 感悟记录管理
- 家庭事项管理
- 今日计划管理
- 报告生成
- 邮件发送
## 技术栈
- Python 3.10+
- Django 4.2+
- Bootstrap 5
- SQLite开发环境
- PostgreSQL/MySQL生产环境
- Gunicorn + Nginx生产部署
## 快速开始
### 安装依赖
```bash
pip install -r requirements.txt
```
### 运行开发服务器
```bash
python manage.py runserver
```
### 访问系统
打开浏览器访问http://127.0.0.1:8000
## 数据库迁移指南
### 基本迁移流程
1. 生成迁移文件:
```bash
python manage.py makemigrations
```
2. 查看迁移文件内容(重要!):
```bash
cat core/migrations/000x_xxx.py
```
3. 应用迁移:
```bash
python manage.py migrate
```
### 当数据库有数据时增加字段
#### 问题说明
当数据库中已有数据时通过Django的migrate命令增加新字段**不会删除原有数据**,但需要注意以下几点:
1. 如果新字段设置为**非空**`null=False, blank=False`),则必须提供默认值,否则迁移会失败
2. 如果新字段设置为**可空**`null=True, blank=True`则迁移会自动执行原有记录的新字段值为NULL
#### 正确部署流程
1. **在开发环境测试**
- 首先在开发环境生成迁移文件
- 检查迁移文件内容,确保:
- 新字段设置为可空(`null=True, blank=True`),或者
- 新字段提供了合理的默认值
- 在开发环境执行迁移,测试功能是否正常
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
```
3. **在生产环境执行迁移**
```bash
# 进入项目目录
cd /path/to/diary-family
# 激活虚拟环境
source venv/bin/activate
# 生成迁移文件(如果在开发环境已生成,可跳过)
python manage.py makemigrations
# 应用迁移
python manage.py migrate
```
4. **验证迁移结果**
- 检查应用是否正常运行
- 验证新功能是否可用
- 检查数据是否完整
#### 示例增加阅读笔记note字段
1. 在模型中添加字段(`core/models.py`
```python
# 正确的做法:设置为可空字段
note = models.TextField(blank=True, null=True, verbose_name="阅读笔记")
# 或者:提供默认值
note = models.TextField(default="", blank=True, verbose_name="阅读笔记")
```
2. 生成迁移文件:
```bash
python manage.py makemigrations
```
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='阅读笔记'),
),
]
```
4. 应用迁移:
```bash
python manage.py migrate
```
## 生产部署
### 使用Gunicorn + Nginx
1. 安装Gunicorn
```bash
pip install gunicorn
```
2. 启动Gunicorn
```bash
gunicorn diary_family.wsgi:application --bind 0.0.0.0:8000
```
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/;
}
}
```
4. 启用Nginx配置
```bash
ln -s /etc/nginx/sites-available/diary-family /etc/nginx/sites-enabled/
systemctl restart nginx
```
## 系统配置
在系统配置页面可以设置:
- SMTP服务器信息
- 邮件发送时间
- 收件人邮箱
## 注意事项
1. 定期备份数据库
2. 生产环境建议使用PostgreSQL或MySQL数据库
3. 定期清理过期数据
4. 保持依赖包更新
## 许可证
MIT License