news 2026/10/4 5:04:42

基于 Python + Django 的学生宿舍管理系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Python + Django 的学生宿舍管理系统

温馨提示:本人主页置顶文章(点我)开头有 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. 系统测试与部署

开发完成后,建议按以下步骤进行测试与部署:

  1. 编写单元测试覆盖入住、退宿、报修等核心业务逻辑。
  2. 使用 Django 自带测试客户端模拟管理员和学生的操作流程。
  3. 在本地环境验证通过后,使用 collectstatic 收集静态文件。
  4. 通过 Gunicorn 启动服务,并由 Nginx 反向代理对外提供访问。

8. 总结

本文基于 Python 和 Django 实现了一套功能完整的学生宿舍管理系统,覆盖宿舍分配、入住退宿、报修处理和访客登记等核心场景。系统采用 MTV 架构,代码结构清晰,便于后续扩展。未来可进一步引入消息通知、移动端适配和数据可视化报表,提升管理效率和使用体验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 5:03:00

voxel_coors深度解析:体素坐标在3D检测模型中的流转与调试

我到现在还记得第一次在mmdetection3d里调试PointPillars时的情景&#xff1a;断点打在模型forward里&#xff0c;盯着一路传下来的voxel_coors这个Tensor发呆。形状是(N, 4)&#xff0c;数值看起来像是坐标&#xff0c;但又不完全是坐标&#xff0c;四个维度分别是什么&#x…

作者头像 李华
网站建设 2026/10/4 5:00:06

Jenkins -- 下载安装

环境 我本地的环境是ubuntu24 按官方指导下载 Debian Jenkins Packages 自己安装下载 docker找Jenkins的镜像 docker search jenkins 拉取镜像jenkins/jenkins&#xff0c;并启动容器 docker run -d --name jenkins_1 -v jenkins_1:/var/jenkins_home -p 8080:8080 -p 5000…

作者头像 李华
网站建设 2026/10/4 4:59:47

插件系统底层原理:从plugin.json到TypeScript SDK的全链路解析

1. 项目概述&#xff1a;从“plugins”这个词开始&#xff0c;我们到底在谈什么&#xff1f;“plugins”不是某个具体软件的专属名词&#xff0c;而是一套通用的、被现代开发工具广泛采纳的扩展机制设计范式。它背后代表的是一种“主程序轻量化 功能模块化 生态可生长”的工程…

作者头像 李华
网站建设 2026/10/4 4:58:58

MTK平台PWM蜂鸣器驱动配置与硬件协同调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 4:58:39

2026年第39周GitHub趋势:热门项目、访问提速与项目评估

每周一早上刷一遍GitHub Trending&#xff0c;已经成了我这几年的固定环节。2026年第39周这几天&#xff0c;趋势榜照例热闹&#xff0c;但比起具体项目名单&#xff0c;我更想先说另一个现象&#xff1a;这周群里至少有三个人在问同一句话——“GitHub是不是又打不开了&#x…

作者头像 李华
网站建设 2026/10/4 4:58:20

SIL软件在环仿真:自动驾驶控制算法的嵌入式鲁棒性验证核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华