软件设计开发
本栏目责任编辑:谢媛媛
基于Django 的用户信息管理系统
余斌
(中国人民解放军95227部队,湖北武汉430079)
摘要:用户信息管理是一项重要而基础的工作。为提高信息管理效率与标准,运用网络应用开发框架Django 开发用户信
息管理系统。该管理系统实现了操作员管理,用户信息管理与校对等功能,并结合具体需求就如何拓展Django ORM API 进行探讨。
关键词:信息管理;数据库;Django 关系代数;查询中图分类号:TP311
文献标识码:A
文章编号:1009-3044(2021)05-0089-02
开放科学(资源服务)标识码(OSID ):
1引言
随着计算机与互联网技术不断发展,人们对信息生成、存储、处置方式也在逐步演化。信息管理方式从过去客户端/服务器模式转向浏览器/服务器模式。运行于服务器端的脚本语言,如Perl ,PHP 等随即兴起。网络应用开发初期,脚本语言业务逻辑与表示逻辑交织,网络应用程序可维护性较差。为了方便应用开发,将网络应用程序中常用功能模块进行抽取组合,构建网络开发框架。网络开发框架按照MVC 模式,将数据逻辑、业务逻辑、表示逻辑解耦,明晰了开发流程,规范了开发模式,提高了开发效率。网络开发框架出现解决了网络应用开发的困境。
Python 是一种面向对象、解释执行、通用脚本语言,它具有语法结构简单,开发过程规范,内置标准库完善,第三方类库丰富等优点。它在网络爬取、WEB 开发、图像处理、数值计算、机器学习、自然语言处理等方面都有许多优秀开源项目。Django 是一种基于Python 的网络开发框架。Django 一方面为开发人员提供了用户管理,表单处理,数据库建模,模板渲染,数据过滤,防跨站攻击等功能,另一方面也允许开发人员能够对内置模块根据需求进行拓展。
Django 采用了MTV 模式,即Model-Template-View 。Djan⁃go 将业务逻辑、表示逻辑以及数据库定义三者在应用开发过程中完全分离。在Models.py 模块中用ORM 定义数据库结构并实现对数据库操作封装,在Views.py 模块中实现业务逻辑,完成对数据的操作,包括增加、修改、删除、查询等操作以及其他需要实现的功能,操作结果作为参数传递给Templates 中对应的表示逻辑模块,即通过模板渲染出对应页面并通过浏览器展示给用户。
django登录注册功能
Django 开发网络应用程序以项目为组织结构,功能不同的应用模块组合构成一个项目。一个基本Django 网络应用程序的结构如图1所示。
图1程序结构
2系统数据建模
2.1需求分析
用户信息管理系统主要目标是对部门用户信息按特定要求进行有效管理。部门由两个小组分别维护同一组用户不同类别信息,每个小组各自维护本小组所采集用户信息与变化情况,并在一定周期内校验用户基础信息,确保信息同步。如果某个小组所维护数据不在另一小组数据中,即出现了新增用户信息,则将此数据加入另一小组数据库中。如果两个小组存在着相似数据,但关键信息不一致,则提醒双方核实该项数据,最后分别更新到各自数据库中。立足数据需求与业务特点,将该系统分成五大模块:操作员与权限管理,增加用户信息,查用户信息,核对用户信息与用户信息汇总。2.2数据建模
结合上述功能需求,用户信息管理系统需建立6个数据表:CKUser ,CJUser ,Phone ,Operation ,Operator ,Rank ,其中CK⁃User ,CJUser 用于存储两个工作小组各自用户信息,Phone 用于存储所有用户电话号码,Operation 保存用户信息新增更改删除等操作记录信息,Operator 分别存储两
个小组人员信息,Rank 用于存储各个人员权限级别。各个数据表的表结构信息以及数据表之间的关系如图2所示。Django 内建支持多种数据库。
收稿日期:2020-05-05作者简介:余斌(1978—),男,江西广丰人,高级工程师,硕士,主要研究方向为交换技术与软件测试。
89
本栏目责任编辑:谢媛媛
软件设计开发Computer Knowledge and Technology 电脑知识与技术第17卷第5期(2021年2月)
基于本信息管理系统开发需求,选择文件型数据库SQLite 作为
数据存储。
图2数据库关系图
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 方法用新建操作员的表单中的数据ate 方法就生成了Operator 表中的一条新数据。
通过get ,filter ,all 等API 可以通过不同过滤条件来查数据库记录。例如,通过user =(phone=phone)可以获得CJUser 表中与需查询号码一致的用户。通过save,up⁃date 可以更新所选择记录信息,通过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 命令来实现此类比较需求。Djan⁃go 网络应用程序支持两种方式在运行期间执行原生SQL 命令序列。第一种使用ute(),返回一个查询对象实例,若要获取查询结果还要执行查询对象的方法fetchall()。第二种somemodel.objects.raw(),也返回一个查询对象实例,也可直接返回查询结果,只需在select 子语句中加上主键键值,如phone_user.id 。实现代码如下:
rows_diff =User.objects.raw("select distinct phone_user.id from phone_user join phone_cjuser /
on (phone_user.phone_id=phone_cjuser.phone_id and phone_user.name<>phone_cjuser.name);")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.
【通联编辑:光文玲】
90

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。