小明:嗨,小李,我最近在做一个学生宿舍管理系统,想让你看看我的演示效果。
小李:哦,听起来不错。你是用什么语言写的?有什么功能呢?
小明:主要是用Python和Django框架做的,前端用了HTML、CSS和JavaScript。系统包括学生信息管理、宿舍分配、费用结算等功能。
小李:那你是怎么演示的?有没有具体的代码示例?
小明:当然有,我可以给你展示一下。首先,我需要创建一个简单的模型,比如学生和宿舍的信息。
小李:好的,那我们先从模型开始吧。
小明:是的,下面是一个简单的模型定义:

from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
student_id = models.CharField(max_length=20, unique=True)
dormitory = models.ForeignKey('Dormitory', on_delete=models.CASCADE)
class Dormitory(models.Model):
room_number = models.CharField(max_length=10, unique=True)
capacity = models.IntegerField()
occupied = models.IntegerField(default=0)
小李:看起来结构清晰。接下来是不是要处理数据的增删改查?
小明:没错,我用Django的Admin界面来做基本的数据管理,但为了演示,我还写了一个简单的视图。
小李:能给我看看视图代码吗?
小明:当然可以,这是获取所有学生的视图:
from django.shortcuts import render
from .models import Student
def list_students(request):
students = Student.objects.all()
return render(request, 'students/list.html', {'students': students})
小李:嗯,这样就能显示学生列表了。那前端页面是怎么做的?
小明:前端页面用的是HTML模板,Django会自动渲染变量。比如,这里有一个简单的列表页面:
学生列表
{% for student in students %}
{{ student.name }} - {{ student.student_id }}
{% endfor %}
小李:这个挺直观的。那宿舍分配是怎么实现的?有没有涉及复杂的逻辑?
小明:确实有点复杂。我需要检查宿舍是否还有空位,然后将学生分配到合适的房间。
小李:那你可以写一个函数来处理分配逻辑,对吧?
小明:是的,下面是一个简单的分配函数示例:
def assign_dormitory(student, dormitory):
if dormitory.occupied < dormitory.capacity:
student.dormitory = dormitory
student.save()
dormitory.occupied += 1
dormitory.save()
return True
else:
return False
小李:这个函数能有效防止超员。那你有没有考虑过并发操作的问题?比如多个用户同时分配宿舍。
小明:这确实是个问题。我可以用Django的事务来保证数据一致性,或者使用锁机制。
小李:那你怎么处理费用结算呢?比如按月收费或按天计算?
小明:费用部分我设计了一个账单模型,记录每个学生的费用情况。例如:
class Bill(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
amount = models.DecimalField(max_digits=10, decimal_places=2)
due_date = models.DateField()
paid = models.BooleanField(default=False)
小李:这样就可以跟踪学生的缴费情况了。那你是怎么生成报表的?比如统计某个月的费用收入?
小明:我用Django的聚合查询来生成报表,比如统计某个月的总费用:
from django.db.models import Sum
total_income = Bill.objects.filter(due_date__month=3).aggregate(total=Sum('amount'))
print("三月份总收入:", total_income['total'])
小李:这样就能轻松地生成财务报告了。那你的系统有没有用户权限管理?比如管理员和普通学生有不同的权限?
小明:有的,我用Django的内置认证系统,加上自定义的权限模型。比如,管理员可以查看所有数据,而普通学生只能看到自己的信息。
小李:那你是怎么实现权限控制的?
小明:我通过中间件和装饰器来限制访问。比如,只有管理员才能访问某些视图:
from django.contrib.auth.decorators import login_required, user_passes_test
def is_admin(user):
return user.is_superuser
@login_required
@user_passes_test(is_admin)
def admin_view(request):
# 管理员专属视图
return render(request, 'admin/dashboard.html')
小李:这个方法很实用。那你有没有做测试?确保系统稳定运行?
小明:是的,我写了单元测试和集成测试,确保各个模块正常工作。比如,测试学生分配是否成功:
from django.test import TestCase
from .models import Student, Dormitory
class AssignmentTest(TestCase):
def setUp(self):
self.dorm = Dormitory.objects.create(room_number="101", capacity=2)
self.student1 = Student.objects.create(name="张三", student_id="S001")
self.student2 = Student.objects.create(name="李四", student_id="S002")
def test_assign_student(self):
result = assign_dormitory(self.student1, self.dorm)
self.assertTrue(result)
self.assertEqual(self.dorm.occupied, 1)
小李:看来你做了很多细致的工作。那整个系统是怎么部署的?有没有遇到什么问题?
小明:我用Docker容器化部署,这样可以避免环境依赖问题。不过一开始配置数据库连接时遇到了一些麻烦。
小李:Docker是个好选择,方便管理和扩展。那你是怎么进行用户界面设计的?有没有用到前端框架?
小明:前端我用了Bootstrap,让界面更美观。另外,我还用JavaScript实现了动态加载和表单验证。
小李:这样用户体验会更好。最后,你有没有计划继续优化系统?
小明:我想加入更多功能,比如宿舍维修申请、学生反馈系统等。未来还可以接入微信小程序,让移动端也能使用。
小李:听起来很有前景。感谢你分享这些内容,我觉得这个项目很有价值。
小明:谢谢你的建议!希望以后还能一起合作开发更多的项目。
