1、基于Django的实验室设备管理系统设计效果分析0 引言 实验室设备管理一直是一项繁琐的工作,包括实验耗品的入库和领用,硬件设备的入库、领用和报废等。由于缺少数据的集中管理,查找设备的相关信息时比较困难。本文实现了Django技术开发的实验室设备管理系统,该系统有助于实验设备管理人员对实验设备进行管理。1 关键技术 Django是一个开源的Web应用框架,由Python语言编写,用来减少开发复杂的数据库驱动站点所要求的工作。Django注重组件的重用性和可插拔性;,以及敏捷开发和DRY法则。Django框架的核心包括:一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关联性数据
2、库间的媒介;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;一个模板系统【1】。 Django可以运行在许多Web服务器上,例如Apache,或者是任何WSGI兼容的服务器。同时,Django还支持许多数据库引擎,例如PostgreSQL、MySQL、Oracle。2 系统需求分析2.1 功能需求分析 根据实验室设备的日常管理,系统主要功能分为如下几个部分: (1)实验耗品管理。每年实验室都会申购一批实验耗品,例如焊锡、松香、实验用电路板、可充电电池等。该功能负责管理实验耗品的购入、使用、存量、记录和查询等数据信息。 (2)非易耗品设备管理。实验设备主要是一些非易耗品,例如电脑、
3、投影仪等。这些非易耗品不会经常损耗,但是会涉及到设备的采购入库、报废、设备的领用场地等数据【2】。该功能主要实现这些非易耗品的入库、报废、设备目前使用情况等数据信息的管理。 (3)领用申请模块。要使用实验耗品和非易耗品都需要进行领用的申请。领用申请包括领用数量、领用类型、领用人、领用原由等信息【3】。根据这些信息,可以快速、准确地查到实验设备的使用情况。2.2 非功能需求分析 非功能需求通常包括系统的效率、可靠性、可用性、可维护性、适应性和易用性等。系统在高校内部使用,因而用户不会太多,但仍然对并发访问时的系统性能有要求:单用户操作系统时,2s之内出现结果;多个用户同时访问操作系统,要求并发的
4、响应时间不得超过8s;对于恶意入侵,比如网络包攻击、SQL注入攻击等具有防范能力;系统的理想故障频率为1次/年,最坏故障频率为2次/年,最理想故障频率为0.5次/年。 系统的易用性在设计方面的要求是界面友好、符合用户操作习惯、易上手。即:系统界面简单整洁,布局设计合理,符合目前一般用户的使用习惯;尽量减少使用者的输入量,人机对话友好,有操作错误提示,处理错误的数据输入。3 系统设计3.1 系统体系结构设计 Django是一个典型的MVC模型框架,view.py、url.py、model.py分别代表模型、视图和控制,分别处理表现层、控制层和数据层的业务处理。系统体系结构如图1所示。图1 实验室
5、设备管理系统体系结构 使用MVC结构,使得基于实验室设备管理系统满足如下要求: (1)非功能性需求中的易用性。用户使用系统不需要占用客户机太多的资源,在人机交互过程中操作简便。 (2)非功能性需求中的可用性。系统采用B/S、MVC结构,在服务器端设置网络防火墙可以防止一般的网络攻击。在系统方面,MVC分离了页面和数据库,无法通过控制直接修改数据库内的数据,由于使用了Django的模板技术和自带的ORM框架,保证了系统的安全可用。 (3)非功能需求中的可维护性和适应性。系统的分层设计使得系统的升级维护更加简单。系统只是在服务器上运行,客户通过浏览器进行访问,所以系统的升级维护都只需要在客户机上进
6、行,不需要耗费大量成本进行维护升级。3.2 系统功能设计 根据功能需求分析,系统需要完成对耗材、非耗材的领用情况、库存方面的管理。系统功能模块如图2所示。图2 系统功能模块3.3 数据库设计 系统数据库的主要实体表如表1表3所示。表1 耗品清单(nlab_consumption)字段名数据长度是否允许空备注idint(4)否主键consumptionVarchar(50)是耗品名称cnumberInt(4)是耗品数量storageTimesmalldatetime是入库时间表2 设备清单(nlab_device)字段名数据长度是否允许空备注idInt(4)否主键devicenvarchar(5
7、0)是设备名称damountInt(4)是设备数量dtypenvarchar(50)是设备类型dstrorageTimedatetime是入库时间scrapint(4)是是否报废assetNumbernvarchar(20)是资产号表3 领用信息(nlab_useinfo)字段名数据长度是否允许空备注idInt(4)否主键usernameVarchar(20)是领用人名字usertimeSmalldatetime是领用时间purposeVarchar(20)是用途usenumberInt(4)是领用数量returnInt(4)是是否归还4 系统实现4.1 开发环境 系统开发采用Python2.
8、7,Django1.6版本,Web服务器采用Apache,数据库使用MySQL。编写代码的工具采用Eclipse,利用PyDev插件,实现了在Eclipse中开发Django的应用项目。项目文件如图3所示。4.2 部分实现代码 使用Eclipse创建一个Django的工程后,会产生一些.py的文件,包括views.py、urls.py、settings.py、admin.py等,这些文件包括了项目的配置、Django自带后台的管理配置、数据库ORM、视图和控制的配置与开发等。图3 项目文件4.2.1 urls.py urls.py文件负责配置URL的地址映射和管理URL的地址格式。通过正则表达
9、式注册站点信息,核心代码如下: admin.autodiscover() urlpatterns = patterns(, include(admin.site.urls),)4.2.2 settings.py settings.py是Django工程的配置文件,与工程相关的工程模块和数据库全局配置信息都在settings.py中设置。在该文件中加入项目及配置数据库,相关代码如下: INSTALLED_APPS = (django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessi
10、ons,django.contrib.messages,django.contrib.staticfiles,nlab,#这里添加了nlab项目 ) DATABASES = default: ENGINE: django.db.backends.mysql,NAME: djangoNlab,USER:root,PASSWORD: , 4.2.3 models.py 借助Django内部的对象关系映射机制,可以用Python语言实现对数据库表中实体的操作,实体模型的描述需要在文件models.py中配置。models.py中nlab_consumption表对应的代码如下: class nlab
11、_consumption(models.Model):id = models.IntegerField (max_length = 4)consumption = models.CharField(max_length = 50)cnumber = models.IntegerField (max_length = 4)storageTime = models.DateField(blank = False,null = True)def _unicode_(self):return self. consumptionclass Meta:ordering =4.2.4 admin.py admin.py中添加要管理的对象。当配置文件的改动完成后,执行命令,Django会根据模型的定义自动完成ORM的数据库映射工作,屏蔽了底层数据库细节和SQL查询的编写。注册对象代码如下: admin.site.register(nlab_consumption)5 结语 通过实验室设备管理系统,可以高效地查询到耗品和硬件设备的使用情况,能够提高耗品的使用效率,避免重复购买。同时可以掌握硬件设备的使用年限