# 家庭日报系统 专注于家庭生活的轻量级日报系统,使用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