初始Django之宿舍管理系统(ORM基础入门篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

初始Django之宿舍管理系统(ORM入门篇)


项目部分功能展示:
**

管理员登录:

**
在
这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述**

宿管登录:

**
在这里插入图片描述在这里插入图片描述
**

学生登录:

**

在这里插入图片描述在这里插入图片描述

前言

  • 宿舍管理系统是一种能够提高学生宿舍管理效率的工具。随着大学生群体的不断增长,宿舍管理工作变得越来越复杂,传统的手工管理方式已经无法满足需求。为了提高宿舍管理的便利性和效率,引入计算机技术成为了必然选择。
  • Django是一种基于Python语言开发的高性能Web开发框架,它的设计理念是简洁、优雅、高效。它提供了丰富的功能和强大的开发工具,使得开发人员能够快速构建出稳定可靠的Web应用程序。
  • 本文将介绍如何使用Django开发一个宿舍管理系统。宿舍管理系统主要包括学生信息管理、入住管理、楼栋和房间管理、报修管理等功能。(最简单方式无from表单验证)

提示:以下是本篇文章正文内容,下面案例可供参考

一、宿舍管理系统需求分析

所需技术包:
	asgiref==3.8.1
	Django==5.0.7
	et-xmlfile==1.1.0
	openpyxl==3.1.5
	PyMySQL==1.1.1
	sqlparse==0.5.1
	tzdata==2024.1

设置权限管理:系统管理员可以设置不同用户的权限,限制其对系统功能的访问和操作。

1.学生信息管理:

学生信息录入: 包括学生姓名、学号、性别、班级,宿舍号,并自动保存学号后六位为密码等信息。
学生信息查询: 根据学号等关键字进行查询,并显示学生的详细信息。
学生信息导入: 使用openpyxl读取并导入本地的.xlsx文件。
学生信息导出: 使用openpyxl创建一个新的Excel工作簿并将数据写入其中,最后保存至本地。

2.宿舍信息管理:

楼栋信息: 楼栋编号、楼栋名称、楼栋地址等。可以实现楼栋信息的增加、修改、删除和查询功能。 
宿管信息: 宿管楼栋、宿管姓名、宿管电话等。 可以实现宿管信息的增加、修改、删除和查询功能。
宿舍信息: 楼栋编号、宿管编号、宿舍容量人数、宿舍已住人数等。可以实现宿舍信息的增加、修改、删除和查询功能。
可以根据学生信息绑定的宿舍自动更新已住人数,如超过容量则不允许更换学生寝室。
入住统计:系统可以生成宿舍入住统计报表。

3.维修信息管理:

报修管理:学生可以提交宿舍报修请求,管理员可以查看并处理报修请求。
维修信息: 申请人、申请宿舍(学生登陆时自动绑定宿舍不可更改)、故障信息、申请时间等信息进行增加、修改、删除和查询功能。

4.访客信息管理

访客基本信息管理: 记录和管理访客的基本信息,包括姓名、联系方式等。
访问记录管理: 记录和管理访客的访问记录,包括访问时间、访问地点等信息

5.宿舍通知管理

 允许管理员和宿管发布、修改、删除通知。通知应包括标题、内容、发布时间等信息。

二、系统设计与实现

1.ORM中Model设计

在ORM(Object-Relational Mapping)中,处理外键关系(如一对多、一对一、多对多)是非常重要的。这些关系帮助我们在数据库中维护数据的一致性和完整性。以下是在ORM中定义和使用这些关系的基本写法和用法,以Python的Django ORM为例(因为Django的ORM非常流行且易于理解):
一对多(ForeignKey):
一对多关系是最常见的数据库关系之一。在Django中,你可以通过在模型中使用ForeignKey字段来定义一对多关系。
一对一(OneToOneField):
一对一关系用于表示两个模型之间的严格一对一映射。在Django中,你可以使用OneToOneField来定义这种关系。
多对多(ManyToManyField)
多对多关系表示两个模型之间可以存在多个关联。在Django中,你可以使用ManyToManyField来定义这种关系。

(1). 宿舍信息模型代码如下(示例):
from django.db import models
from django.contrib.auth.hashers import make_password, check_password
from django.core.validators import RegexValidator, MinLengthValidator

class Building(models.Model):
    building_name = models.CharField(max_length=50, verbose_name='楼宇名字')
    remarks = models.TextField(verbose_name='楼宇备注')

    def __str__(self):
        return self.building_name

class Dormitory(models.Model):
    dorm_num = models.CharField(max_length=10, unique=True, verbose_name='宿舍号')
    # 这里是外键 一对多的关系  一个楼宇 对应多个宿舍
    building = models.ForeignKey('Building', on_delete=models.CASCADE, verbose_name='楼宇')
    floor = models.IntegerField(verbose_name='楼层')
    capacity = models.PositiveIntegerField(verbose_name='容量', default=4)
    current_occupancy = models.PositiveIntegerField(verbose_name='当前已住人数', default=0)
    remarks = models.TextField(verbose_name='备注')

    class Meta:
        ordering=['building']

    def __str__(self):
        return self.dorm_num

    def add_student(self):
        if self.current_occupancy < self.capacity:
            self.current_occupancy += 1
            self.save()
        else:
            print("宿舍已满,无法新增学生")

    def remove_student(self):
        if self.current_occupancy > 0:
            self.current_occupancy -= 1
            self.save()
        else:
            print("宿舍为空,无法移除学生")


class DormitoryManager(models.Model):
    GENDER_CHOICES = [
        ('M', '男'),
        ('F', '女'),
    ]

    manager_name = models.CharField(max_length=50, verbose_name="宿管姓名")
    manager_tel = models.CharField(
        max_length=15,
        verbose_name='宿管电话',
        validators=[RegexValidator(r'^\d{10,15}$', '请输入有效的电话号码')],
        unique=True,
    )
    manager_password = models.CharField(
        max_length=128,
        verbose_name="宿管密码",
        validators=[MinLengthValidator(6)]
    )
    # 这里也是一对多的关系 !!!
    building = models.ForeignKey(Building, on_delete=models.CASCADE, verbose_name='管理楼宇')

    def save(self, *args, **kwargs):
        if not self.pk and not self.manager_password:
            # 设置初始密码并加密
            self.manager_password = make_password(self.manager_tel[-6:])
        elif self.manager_password and not self.manager_password.startswith('pbkdf2_sha256$'):
            # 如果密码没有加密,确保再次加密(防止更新时明文存储)
            self.manager_password = make_password(self.manager_password)
        super(DormitoryManager, self).save(*args, **kwargs)
    def __str__(self):
        return self.manager_name
    def check_password(self, raw_password):
        return check_password(raw_password, self.manager_password)
(2). 学生信息模型代码如下(示例):
from django.db import models
from django.core.validators import RegexValidator, MinLengthValidator
from django.contrib.auth.hashers import make_password
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from dorm.models import Dormitory

class Student(models.Model):
    GENDER_CHOICES = [
        ('M', '男'),
        ('F', '女'),
    ]
    STATUS_CHOICES = [
        ('active', '激活'),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值