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