温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景
随着高校招生规模不断扩大,学生宿舍管理的复杂度也在持续上升。传统的人工登记、纸质台账方式存在信息更新不及时、查询效率低、数据易丢失等问题。为了提升宿舍管理效率,本文设计并实现一套基于 Python 和 Django 框架的学生宿舍管理系统,覆盖宿舍分配、入住登记、退宿管理、报修处理、访客登记等核心业务场景。
2. 技术选型
本系统采用以下技术栈:
- 后端框架:Django 4.x,基于 MTV 架构,自带 ORM、Admin 后台和认证体系。
- 前端界面:Bootstrap 5 + jQuery,保证页面响应式布局和交互体验。
- 数据库:MySQL 8.0,通过 Django ORM 完成数据建模与迁移。
- 缓存与会话:Redis,用于会话存储和热点数据缓存。
- 部署环境:Nginx + Gunicorn,运行于 Linux 服务器。
3. 系统功能模块
系统按角色划分为管理员、宿管员和学生三类用户,主要功能模块如下:
| 模块 | 功能说明 | 适用角色 |
|---|---|---|
| 用户认证 | 登录、注册、密码修改、权限控制 | 全部用户 |
| 宿舍管理 | 楼栋、房间、床位信息维护 | 管理员、宿管员 |
| 入住管理 | 学生入住登记、床位分配、调宿申请 | 管理员、宿管员 |
| 退宿管理 | 退宿登记、物品清点、费用结算 | 管理员、宿管员 |
| 报修管理 | 在线报修、维修派单、进度跟踪 | 全部用户 |
| 访客登记 | 访客信息登记、出入记录查询 | 宿管员 |
| 数据统计 | 入住率、空床位、报修完成率等报表 | 管理员 |
4. 数据库设计
系统核心数据表包括用户表、宿舍楼表、房间表、床位表、入住记录表、报修单表和访客记录表。以下为主要表结构说明:
from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): ROLE_CHOICES = ( ('admin', '管理员'), ('manager', '宿管员'), ('student', '学生'), ) role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='student') student_no = models.CharField(max_length=20, blank=True, null=True, verbose_name='学号') class Building(models.Model): name = models.CharField(max_length=50, verbose_name='楼栋名称') address = models.CharField(max_length=100, verbose_name='楼栋位置') manager = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='managed_buildings') class Room(models.Model): building = models.ForeignKey(Building, on_delete=models.CASCADE, related_name='rooms') room_no = models.CharField(max_length=20, verbose_name='房间号') capacity = models.IntegerField(default=4, verbose_name='可住人数') floor = models.IntegerField(verbose_name='楼层') class Bed(models.Model): room = models.ForeignKey(Room, on_delete=models.CASCADE, related_name='beds') bed_no = models.CharField(max_length=10, verbose_name='床位号') is_occupied = models.BooleanField(default=False, verbose_name='是否已入住') class CheckInRecord(models.Model): student = models.ForeignKey(User, on_delete=models.CASCADE, related_name='checkin_records') bed = models.ForeignKey(Bed, on_delete=models.CASCADE) check_in_date = models.DateField(auto_now_add=True, verbose_name='入住日期') check_out_date = models.DateField(null=True, blank=True, verbose_name='退宿日期') class RepairOrder(models.Model): STATUS_CHOICES = ( ('pending', '待处理'), ('processing', '处理中'), ('done', '已完成'), ) reporter = models.ForeignKey(User, on_delete=models.CASCADE, related_name='repair_orders') room = models.ForeignKey(Room, on_delete=models.CASCADE) description = models.TextField(verbose_name='故障描述') status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending') created_at = models.DateTimeField(auto_now_add=True)5. 核心功能实现
5.1 宿舍分配
宿舍分配是系统的核心流程。管理员选择楼栋和房间后,系统自动列出空余床位,学生入住时更新床位状态并生成入住记录。实现代码如下:
from django.shortcuts import get_object_or_404 from .models import Room, Bed, CheckInRecord def assign_bed(request, room_id, student_id): room = get_object_or_404(Room, id=room_id) bed = Bed.objects.filter(room=room, is_occupied=False).first() if not bed: return {'success': False, 'message': '该房间暂无空余床位'} bed.is_occupied = True bed.save() CheckInRecord.objects.create( student_id=student_id, bed=bed, ) return {'success': True, 'message': '入住登记成功'}5.2 报修流程
学生提交报修单后,宿管员可查看并更新处理状态。系统通过状态字段跟踪整个维修流程:
from django.views.decorators.http import require_POST from django.http import JsonResponse from .models import RepairOrder @require_POST def update_repair_status(request, order_id): order = get_object_or_404(RepairOrder, id=order_id) new_status = request.POST.get('status') if new_status in dict(RepairOrder.STATUS_CHOICES): order.status = new_status order.save() return JsonResponse({'success': True}) return JsonResponse({'success': False, 'message': '无效的状态值'})6. 页面展示与路由配置
系统采用 Django 模板引擎渲染页面,路由配置如下:
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('login/', views.user_login, name='login'), path('logout/', views.user_logout, name='logout'), path('rooms/', views.room_list, name='room_list'), path('rooms/<int:room_id>/assign/', views.assign_bed, name='assign_bed'), path('repairs/', views.repair_list, name='repair_list'), path('repairs/<int:order_id>/update/', views.update_repair_status, name='update_repair_status'), path('visitors/', views.visitor_list, name='visitor_list'), ]7. 系统测试与部署
开发完成后,建议按以下步骤进行测试与部署:
- 编写单元测试覆盖入住、退宿、报修等核心业务逻辑。
- 使用 Django 自带测试客户端模拟管理员和学生的操作流程。
- 在本地环境验证通过后,使用 collectstatic 收集静态文件。
- 通过 Gunicorn 启动服务,并由 Nginx 反向代理对外提供访问。
8. 总结
本文基于 Python 和 Django 实现了一套功能完整的学生宿舍管理系统,覆盖宿舍分配、入住退宿、报修处理和访客登记等核心场景。系统采用 MTV 架构,代码结构清晰,便于后续扩展。未来可进一步引入消息通知、移动端适配和数据可视化报表,提升管理效率和使用体验。