Django web开发系列(二)图书借阅管理系统之模型设计
admin
2023-07-14 00:43:00
0次

一 前言

在上一篇文章需求分析中,已经大致说明了为什么要开发图书借阅管理系统、系统应该具备哪些角色或行为、系统如何工作等,对该系统应该有了大致的印象,那接下来的文章就是介绍如何一步步实现。


本文将介绍开发图书借阅管理系统的第一步,也是关键的一步—模型设计。如果将系统精简,它符合输入-》驱动-》输出的模型,具体而言,系统收到http请求(输入),对请求进行处理(驱动,即逻辑处理+数据库操作),然后将处理的结果返回前端(输出),所以在这个模型里,重点是驱动部分(Django名词:视图)。乍一看,好像是偏题了,明明说的是Django的模型(model),怎么又扯到视图(view)了。其实,这里是想把本就紧密的概念先引入进来,混个眼熟,更重要的是,好的模型设计既能适应未来的功能扩展,又能提升性能,是系统开发的基础。要知道,你设计了什么样的模型,数据就按什么样子去存、去取。


二 模型设计思路

根据上一篇文章的分析,系统需要维护两类数据,即图书信息和用户借阅信息,相应的,我们设计两个模型,图书模型和用户借阅模型。至于如何设计模型,需要根据业务需要进行分析,就拿图书模型而言,可以做如下分析:


1.模型需要有哪些字段?

首先要搞明白的是,在Django里,模型model相对于数据库的一种表,模型中的每个变量,相当于表中的列,因为Django内置ORM,所以,可以不需要考虑如何建表,如何写sql进行数据操作,一切就奉行python的编写习惯。

那么,图书模型至少需要有以下字段吧:

1) 书名,用于标识图书;

2)作者名,用于标识图书,毕竟同名书籍还是很多的;

3)图书总册数,作为管理系统,需要知道该图书总共有多少册吧;

4)图书可借册数,作为借阅系统,需要知道该图书是否可借,有多少本可借;

5)封面图,来张图书靓照,前端页面不枯燥;


.... 大致,主要的就这么多了,当然,可以根据业务需要继续拓展,如图书分类,图书所属等等,重在思路,就不在此一一展开了。


2.是否需要设计主键或索引?

如果模型未指定主键,Django会帮忙增加一个自增加的ID字段作为主键,主键是唯一索引的,在我们的场景里,任何一个字段值都有可能重复的,所以不设计自定义的主键了,就交给Django打理吧,需要索引查询时,就用ID。


3.是否需要设计外键?

Django有三种外键关系,即一对一、多对一、多对多,理解起来是这样的,一对一就好比员工和员工号的关系,一个员工只有一个员工号,一个员工号也只对应一个员工;多对一,比如工厂和汽车的关系,一个工厂可以生产很多汽车,一台汽车由一个工厂生产;多对多呢,也很常见,比如,一本书可以有多个作者,一个作者也可以写多本书;

把三种关系套在我们的系统,图书和借阅用户的关系就是多对多的,但是,不想把问题搞复杂,在设计上,图书模型只记录图书信息及册数,根据册数判断是否可借;用户模型用于记录图书借阅信息,数据包括借阅人、所借图书、借还时间等信息,另外,也为了能够追踪图书去向,避免不必要的多表联查。


三 模型实现

根据以上分析,模型大致如下(模型在Django其实就是定义类):


class Book(models.Model):
    #定义图书模型
    book_name = models.CharField(max_length=100,verbose_name='书名')
    author_name = models.CharField(max_length=100,verbose_name='作者')
    total_num = models.IntegerField(default=0,verbose_name='总册数')
    available_num = models.PositiveIntegerField(default=0,verbose_name='可借册数')
    book_img = models.ImageField(upload_to='static/bookms/img/',verbose_name='封面图')
    def __str__(self):
        return self.book_name
    class Meta:
        verbose_name = '图书'
        verbose_name_plural = '图书'
        #联合约束
        unique_together = ('book_name','author_name')
        ordering = ['id']


在图书模型Book类里又定义了员数据Meta,其实它对模型定义是非必须的,但在实际应用中,定义一些元数据还是很有用的,如,ordering可以指定数据按哪个字段排序,unique_together联合约束,verbose_name用于设置模型直观、可读的名字。所以,推荐定义一下。



四 其他资源

关于python学习、分享、交流,笔者开通了微信公众号【小蟒社区】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学python。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...