APP下载

基于Django的用户信息管理系统

2021-04-13余斌

电脑知识与技术 2021年5期
关键词:信息管理数据库

余斌

摘要:用户信息管理是一项重要而基础的工作。为提高信息管理效率与标准,运用网络应用开发框架Django开发用户信息管理系统。该管理系统实现了操作员管理,用户信息管理与校对等功能,并结合具体需求就如何拓展Django ORM API进行探讨。

关键词:信息管理;数据库;Django关系代数;查询

1引言

随着计算机与互联网技术不断发展,人们对信息生成、存储、处置方式也在逐步演化。信息管理方式从过去客户端/服务器模式转向浏览器/服务器模式。运行于服务器端的脚本语言,如Perl,PHP等随即兴起。网络应用开发初期,脚本语言业务逻辑与表示逻辑交织,网络应用程序可维护性较差。为了方便应用开发,将网络应用程序中常用功能模块进行抽取组合,构建网络开发框架。网络开发框架按照MVC模式,将数据逻辑、业务逻辑、表示逻辑解耦,明晰了开发流程,规范了开发模式,提高了开发效率。网络开发框架出现解决了网络应用开发的困境。

Python是一种面向对象、解释执行、通用脚本语言,它具有语法结构简单,开发过程规范,内置标准库完善,第三方类库丰富等优点。它在网络爬取、WEB开发、图像处理、数值计算、机器学习、自然语言处理等方面都有许多优秀开源项目。Django是一种基于Python的网络开发框架。Django一方面为开发人员提供了用户管理,表单处理,数据库建模,模板渲染,数据过滤,防跨站攻击等功能,另一方面也允许开发人员能够对内置模块根据需求进行拓展。

Django采用了MTV模式,即Model-Template-View。Django将业务逻辑、表示逻辑以及数据库定义三者在应用开发过程中完全分离。在Models.py模块中用ORM定义数据库结构并实现对数据库操作封装,在Views.py模块中实现业务逻辑,完成对数据的操作,包括增加、修改、删除、查询等操作以及其他需要实现的功能,操作结果作为参数传递给Templates中对应的表示逻辑模块,即通过模板渲染出对应页面并通过浏览器展示给用户。

Django开发网络应用程序以项目为组织结构,功能不同的应用模块组合构成一个项目。一个基本Django网络应用程序的结构如图1所示。

2系统数据建模

2.1需求分析

用户信息管理系统主要目标是对部门用户信息按特定要求进行有效管理。部门由两个小组分别维护同一组用户不同类别信息,每个小组各自维护本小组所采集用户信息与变化情况,并在一定周期内校验用户基础信息,确保信息同步。如果某个小组所维护数据不在另一小组数据中,即出现了新增用户信息,则将此数据加入另一小组数据库中。如果两个小组存在着相似数据,但关键信息不一致,则提醒双方核实该项数据,最后分别更新到各自数据库中。立足数据需求与业务特点,将该系统分成五大模块:操作员与权限管理,增加用户信息,查找用户信息,核对用户信息与用户信息汇总。

2.2数据建模

结合上述功能需求,用户信息管理系统需建立6个数据表:CKUser,CJUser,Phone,Operation,Operator,Rank,其中CKUser,CJUser用于存储两个工作小组各自用户信息,Phone用于存储所有用户电话号码,Operation保存用户信息新增更改删除等操作记录信息,Operator分别存储两个小组人员信息,Rank用于存储各个人员权限级别。各个数据表的表结构信息以及数据表之间的关系如图2所示。Django内建支持多种数据库。基于本信息管理系统开发需求,选择文件型数据库SQLite作为数据存储。

3开发

Django采用ORM模式在models.py模块中创建相应代码,即可通过命令行在数据库中建立对应数据表。如建立CKUser表,我们只需创建CKUser类。CKUser类继承自父类models.Model,类中每个属性都是数据表列名,列的属性由models属性扩展而得到,models支持的数据类型包括字符型,整型,布尔型,时间型,文本型以及外键等。在创建好对象实体后,还可在models.py中实现常用数据库数据操作,将数据库操作代码都统一管理,并在views.py中导入使用。

网络应用程序通过表单从浏览器端获取数据。Django可以通过两种方式创建表单。一是通过 forms.ModelForm,设置该表单所对应数据模型,即可按照数据模型创建特定表单;一是用户结合具体需求定制所需表单。建立表单后,我们就可以在views模块中引用表单来与用户进行数据交换。表单在接受用户输入数据时,应对数据格式进行有效性与合法性验证,一方面避免数据类型错误引发程序出错,另一方面防止恶意用户利用表单操作对数据库进行SQL注入攻击,以提高系统安全性。

3.1数据管理

Django通过ORM封装了对数据库各种操作,业务逻辑层通过调用同一组API可以完成对不同数据库的各种操作。对于数据库进行基本新增,查找,更新,删除可以通过API实现。

通过创建一个对象即可生成一条记录,或者通过get_or_create(),先去查询数据库是否存在相同数据,若未找到则生成该数据。如增加操作员,通过add_operator方法用新建操作员的表单中的数据Operator.objects.create方法就生成了Operator表中的一条新数据。

通过get,filter,all等API可以通过不同过滤条件来查找数据库记录。例如,通过user = cjUser.objects.get(phone=phone)可以获得CJUser表中与需查询号码一致的用戶。通过save,update可以更新所选择记录信息,通过delete可以删除所选择记录。

3.2信息校验

为保证系统安全性,必须完成操作员权限管理与操作控制,确保未登录则无法显示或者只能显示而无法更新信息。登录后A组只能显示更改A组的信息,B组只能显示更改B组的信息。可以用Django内部装饰器@login_require来实现。装饰器是一种语法糖结构。它在不改变函数原有功能前提下,可以为函数增加新功能与要求。例如装饰器@login_require就可以满足用户在登录之后才能运行index函数对应网络请求。

用户登录之后方可进行信息校验。我们以用户姓名与电话号码来判断两个小组信息是否同步。可以将数据差别情况分为以下几种情况。在A表中存在,但在B表中不存在即用户属于集合(A-A[?]B),反之在B表中存在,但在A表中不存在用户属于集合(B-A[?]B)。如果在A表B表中都存在,且信息一致则不用处理。如果号码相同,查看两者名字是否类似或者音近或是形近字。如果用户名字接近,电话号码不同但也比较接近,可提醒工作人员进行人工甄别是否输入不准确所致。

在进行两表差异查询时,Django内置ORM数据库操作无对应API,故需采用原生SQL命令来实现此类比较需求。Django网络应用程序支持两种方式在运行期间执行原生SQL命令序列。第一种使用cursor.execute(),返回一个查询对象实例,若要获取查询结果还要执行查询对象的方法fetchall()。第二种somemodel.objects.raw(),也返回一个查询对象实例,也可直接返回查询结果,只需在select 子语句中加上主键键值,如phone_user.id。实现代码如下:

3.3应用发布

Django既有内置开发HTTP服务器,也可以通过配置适配符合WSGI标准WEB服务器,如FastCGI,Ngnix等。内置开发服务器性能较弱,通常用于开发测试环境,在生成环境中应选用第三方WEB服务器以提高服务性能。

4结论

Django是一种成熟的网络应用开发框架,适合从小型到大规模网络应用开发。本用户信息管理系统能够较直观地核对用户信息,提高工作效率,减少了人为校验差错发生,取得较好实际应用效果。信息管理系統根据时间戳详细记录用户操作记录与内容,为信息维护职责区分提供数据支持,也为进一步分析用户信息提供了数据保障。下一步工作方向,优化在数据量较大时对两表中差异数据的校验算法与查询效率;增加数据导入导出功能;定期自动执行核对任务并提醒工作人员差异数据。

参考文献:

[1] Mark Lutz.Learning.Python [M]. 侯靖,译.3版.北京:机械工业出版社,2009.

[2] Harry Percival. Python.WEB开发:测试驱动方法[M].安道,译.北京:人民邮电出版社,2015.

[3] Bennett J.Practical django projects[M].Berkeley,CA:Apress,2009.

[4] Grant Allen,Mike Owens.SQLite权威指南 [M].杨谦,译.2版.北京:电子工业出版社,2012.

【通联编辑:光文玲】

猜你喜欢

信息管理数据库
造价信息管理在海外投标中的应用探讨
评《现代物流信息管理与技术》(书评)
信息管理在市政PPP工程风险控制中的作用
在高速公路信息管理中如何做好QC小组活动
财务审计信息管理问题研究
面向Web的BIM三维浏览与信息管理