一个基于Django开发的现代化图书馆座位预约管理系统,为学生、教师和管理员提供便捷的自习室预约服务。
- 学生用户: 浏览自习室、创建预约、管理个人预约记录
- 教师用户: 享有预约权限,可能具有优先预约权
- 管理员: 系统管理、预约审核、数据统计
- 自习室信息展示(名称、位置、容量、设备)
- 自习室图片上传
- 实时预约状态查看
- 灵活的时间段配置
- 直观的预约界面
- 实时冲突检测
- 预约状态管理(待确认、已确认、已取消、已完成)
- 预约历史记录追踪
- 批量预约管理
- 预约申请审核
- 用户权限管理
- 系统数据统计
- 搜索和筛选功能
- 个人预约统计
- 系统整体使用情况
- 预约趋势分析
- 导出功能
- 用户认证和授权
- 数据验证和安全检查
- 跨站请求伪造(CSRF)保护
- 权限控制
- 后端框架: Django 4.2.7
- API框架: Django REST Framework 3.14.0
- 数据库: SQLite (开发) / MySQL (生产)
- 前端: HTML + CSS + JavaScript (Bootstrap)
- 测试框架: pytest + pytest-django
- 图像处理: Pillow
- 跨域支持: django-cors-headers
- Python 3.8+
- Django 4.2+
- 现代浏览器支持
git clone <repository-url>
cd study_room_system# Windows
python -m venv venv
venv\Scripts\activate
# macOS/Linux
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txt# 创建数据库迁移
python manage.py makemigrations
# 执行迁移
python manage.py migrate
# 创建超级用户
python manage.py createsuperuser- 安装MySQL服务器
- 创建数据库:
CREATE DATABASE study_room_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;- 修改
settings.py中的数据库配置:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "study_room_db",
"USER": "your_username",
"PASSWORD": "your_password",
"HOST": "localhost",
"PORT": "3306",
"OPTIONS": {
"charset": "utf8mb4",
},
}
}python populate_data.py这将创建:
- 7个时间段(早8点到晚10点)
- 6个不同类型的自习室
- 测试用户账号
- 示例预约记录
python manage.py runserver访问 http://127.0.0.1:8000 查看应用
python run_tests.py# 单元测试
pytest -m unit
# 集成测试
pytest -m integration
# 性能测试
pytest -m performance
# 指定应用测试
pytest accounts/
pytest rooms/
pytest bookings/pytest --cov=. --cov-report=html查看覆盖率报告:打开 htmlcov/index.html
study_room_system/
├── accounts/ # 用户管理应用
│ ├── models.py # 用户模型
│ ├── views.py # 用户视图
│ └── urls.py # 用户路由
├── rooms/ # 自习室管理应用
│ ├── models.py # 自习室和时间段模型
│ ├── views.py # 自习室视图
│ └── urls.py # 自习室路由
├── bookings/ # 预约管理应用
│ ├── models.py # 预约模型
│ ├── views.py # 预约视图
│ ├── api_views.py # API视图
│ ├── serializers.py # API序列化器
│ └── urls.py # 预约路由
├── test_dashboard/ # 测试仪表板
├── tests/ # 测试文件
├── templates/ # HTML模板
├── static/ # 静态文件
├── media/ # 媒体文件
├── study_room_system/ # 项目配置
│ ├── settings.py # 项目设置
│ ├── urls.py # 主路由
│ └── wsgi.py # WSGI配置
├── manage.py # Django管理脚本
├── requirements.txt # 依赖文件
├── populate_data.py # 示例数据生成
├── run_tests.py # 测试运行脚本
└── pytest.ini # pytest配置
- 学生账号:
student1/testpass123 - 学生账号:
student2/testpass123 - 教师账号:
teacher1/testpass123
通过以下命令创建:
python manage.py createsuperuser系统提供RESTful API接口:
GET /api/rooms/- 获取自习室列表GET /api/rooms/{id}/- 获取自习室详情
GET /api/bookings/- 获取预约列表POST /api/bookings/- 创建新预约GET /api/bookings/{id}/- 获取预约详情PUT /api/bookings/{id}/- 更新预约DELETE /api/bookings/{id}/- 删除预约
GET /api/timeslots/- 获取时间段列表GET /api/available-slots/{room_id}/{date}/- 获取可用时间段
# 安装生产环境依赖
pip install gunicorn
pip install whitenoise修改 settings.py:
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-ip-address']
# 静态文件配置
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ... 其他中间件
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'python manage.py collectstaticgunicorn study_room_system.wsgi:application --bind 0.0.0.0:8000server {
listen 80;
server_name your-domain.com;
location /static/ {
alias /path/to/your/project/staticfiles/;
}
location /media/ {
alias /path/to/your/project/media/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}建议使用环境变量管理敏感配置:
# .env 文件
SECRET_KEY=your-secret-key
DEBUG=False
DATABASE_URL=mysql://user:password@localhost/dbname
ALLOWED_HOSTS=your-domain.com,your-ip- 开发环境: SQLite(默认)
- 生产环境: MySQL(推荐)
生产环境建议配置Redis缓存:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
}
}- 遵循PEP 8代码规范
- 使用有意义的变量和函数名
- 添加适当的注释和文档字符串
- 为新功能编写测试用例
- 保持测试覆盖率在80%以上
- 使用pytest进行测试
- 使用清晰的提交信息
- 每个提交只包含一个功能或修复
- 提交前运行测试确保代码质量
# 检查数据库服务是否启动
# 检查数据库配置是否正确
# 确保数据库用户有足够权限# 运行收集静态文件命令
python manage.py collectstatic
# 检查STATIC_URL和STATIC_ROOT配置# 检查MEDIA_URL和MEDIA_ROOT配置
# 确保media目录有写入权限# 检查测试数据库配置
# 确保所有依赖已安装
# 查看具体错误信息本项目采用 MIT 许可证。详见 LICENSE 文件。
欢迎提交Issue和Pull Request来改进项目!
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
如有问题或建议,请通过以下方式联系:
- 项目Issues: GitHub Issues
- 邮箱: your-email@example.com
感谢所有为这个项目做出贡献的开发者和用户!
⭐ 如果这个项目对您有帮助,请给我们一个星标!