基于Wagtail的校园信息分享系统的设计与实现
2018-09-29刘奇灿
刘奇灿
摘 要:为了更好的将分散碎片的校园信息集中整合服务于师生,提出了一种网络环境下的校园信息分享系统。该系统采用Wagtail开源框架,信息检索则扩展了Wagtail内置搜索功能,分享的结果以图表的方式直观地反馈给用户,从而实现了对校园信息有效管理和分享等功能。
关键词:校园信息; 分享系统; Wagtail; Django
Abstract: In order to better integrate the fragmentary campus information for serving teachers and students, campus information sharing system is proposed under a network environment. It uses Wagtail open source framework, extends built-in search function, gives sharing feedback intuitively to the user in a graphical way and realizes the effective management and transmission of campus information, etc.
Key words: campus information; sharing system; Wagtail; Django
引言
在高速发展的信息时代,高校各类校园学生事务信息纷乱繁冗,极不利于高校学生有效地汲取相关内容。将分散碎片的学生事务信息通过统一的平台进行整理和发布能够更有效地反馈给学生。迄今为止国内广大高校对学生事务信息[1]整合还没有较成熟的方案。以陕西师范大学为例,人们将杂乱而无序的学生事务信息,如:学生学业辅导、学生社团活动详情、学生业务办理信息等等,进行有效地整理,使学生事务信息更有效、更便捷地服务师生。既节省人力、物力,又提高工作效率,也组成了一个执行有序、体系庞大、结构多样、关系复杂、功能全面的信息平台,实现了各个相互独立的信息资源库之间的相互协调和有效导航,实现了信息的共享与集成。
同时,网络信息技术的发展使网页编写语言发展迅速,Wagtail框架是基于Python的Django框架[2],具有平台独立性、友好性、扩展性等特性。使其在国外许多慈善机构、大学和公共部门组织的网络平台深受欢迎。Wagtail框架遵循MTV开发模式,内置丰富的Web开发控件,集成了一个轻量级Web Server,可以使开发人员方便高效建立灵活多样的应用。
本文基于Wagtail的校园信息分享系统,以强大的开源框架和MTV模式为支持,通过B/S模式实现了用户分级管理功能、信息内容管理功能和文件资源分享管理等功能。
1 Wagtail框架概述
Wagtail是一个开源的,使用Python和Django框架构建的强大的Web应用框架。采用MTV的软件设计模式,即模型M(负责业务对象与数据库的对象)、模版T(负责前端展示给用户)、视图V(负责业务逻辑)。Wagtail框架的主要特点。
(1)建立于Python的基础上具有强大的应用可扩展性、平台无关性,拥有丰富的第三方模块。
(2)开发于Django框架上具有Django的全部高性能核心:面向對象映射器[3],基于正则的URL路由分发器和可扩展模板系统等。
(3)基于典型的MVC框架的MTV设计模式,各组件都是低耦合的。每个APP应用均可独立更改而不影响到其它的部分。MTV模式如图1所示。
(4) Wagtail框架拥有丰富的、易快速二次开发的内置资源管理功能和内容丰富的文本编辑功能等。
(5)支持多种数据库[4]:如Postgresql、MySql、SQLite和Oracle等数据库。
2 需求分析
当前校园各类学生事务信息纷乱繁冗,充斥在校园生活的每个角落。有些信息重要但是零碎,有时需要某些校园学生信息又不知道在哪里可汲取相关正规内容。由于现在随时随地使用手机浏览器非常便捷,因此研究人员使用Web开发技术,借助校园执行力可信度高的学生组织,快速开发出一套基于Wagtail的校园信息分享系统。系统主要功能。
(1)用户分级管理功能。系统提供了用户登陆、注册与注销的功能,并对用户进行了分级管理。以实现对用户数据安全性即用户和管理员隐私的保护。普通用户可快速搜索查看所需信息内容。对管理员用户,系统则可以提供强大和灵活的内容编辑器,并提供其它数据或权限的操作功能。
(2)信息内容管理功能。该功能包括信息内容或页面的添加、编辑、删除、优化、发布、状态转换、规约等操作步骤。系统管理员将整理过的信息内容导入信息平台中,处理的结果可以迅速以图表的方式呈现出来,从而给用户良好的直观感受。
(3)文件资源分享管理功能。该功能专门提供给系统管理员使用。提供各类文件(txt、doc、excel、ppt等)、图像、音乐、视频的后台上传接口,资源统一在此处集成管理,更有助于信息内容以优化的多样化优化的形式进行管理。
3 系统设计
目前,校园各类信息庞杂无序、内容分散、流动性强且无法找到传统纸质版的文件,统一集成难度极大。为了进一步保证系统信息内容的高度有效、真实可靠性,系统上线前期采用PGC(专家生产内容)模式,借助校园执行力可信度高的学生组织提供强有力的支持。
3.1 系统业务流程
校园学生事务信息繁多,可以采取分类方法进行问题规模的缩减,系统采取两级管理模式,即校园信息管理员和校区信息模块管理员。下面分别以普通学生用户和管理员的业务流程做一简介。
普通学生用户进入分享系统首页,可选择感兴趣的模块进行浏览,或者直接选择咨询台模块。点击进入搜索栏并输入问题的关键字,系统自动关键字匹配,结果以图文并茂的形式反馈给用户。管理员登录系统后台,系统根据用户名而识别管理员权限并提供不同的系统操作功能。进入后管理员选择自己需要编辑的栏目进行相应的编辑优化等操作。管理员、普通用户功能结构如图2、图3所示。
3.2 系统总体架构
分层是现代软件系统的基本架构,通过分层有利于系统的维护和升级。本系统也采用分层思想进行设计,充分考虑了未来扩展的可能性。系统结构表示层结合了purecss开源框架。业务逻辑层则结合了Wagtail开源框架。
3.3 系统特色
(1)实现将各类校园学生事务信息问题汇总管理在线上统一集成管理,真正实现了校园有不懂的问题可以到校园学生信息分享系统查找。
(2)详尽完备的问题查询搜索功能,充分解决人工查找的滞后性,如有需要通过此系统关键词查询便可查看详细信息。
(3)提升系统数据库的安全性,采用具有攻防性的登录身份权限认证机制,大大降低系统被攻击的可能性,确保系统的安全。
4 系统实现
系统基于Wagtail的开发实现主要分为3个模块:数据模型创建( 核心)、项目模板构建和自定义搜索模块。项目模板构建模块是和用户直接交互的,用户可以通过Web页面进行一系列的操作。
4.1 数据模型创建
基于Django的Wagtail 应用可以通过Django 框架提供的API 操作不同的数据库引擎,进行数据库的创建和迁移。同时,Wagtail借助ORM(对象映射)的技术核心,用类的定义描述表的字段,并将类存放到models.py 中,形成MTV 模式中数据模型(Model)部分,大大提高数据库驱动网站的优越性。
考虑到校园信息分享系统的规模,采用的数据库为SQLite类型。其访问速度较快,属轻量级的数据库,支持多种操作系统,占用资源低。SQLite使用本地文件作为存储介质,并且用原生的文件系统权限来访问和控制。适合大量的用户进行并发查询搜索。
数据模型定义后, 在命令提示符下将当前路径转到项目路径。然后执行manage.py migrate 和python manger.py makemigrations命令,就可以在数据库中生成相应表。
4.2 项目模板构建
由于开源框架具有文档充实、可伸缩、源代码公布、可靠等优点[5],为了最大限度降低风险,提高质量和大幅度节省时间,系统项目模板构建运用了成熟的开源框架,并对开源框架进行扩展和定制。
项目模板构建系统引用了轻量美观的purecss框架。有一系列集成的layouts供系统使用,且具有轻量级、响应式的特点。前后台交互渲染过程中使用Wagtail的static标签引用。对整个项目而言,模板对应的页面模型处于其上下文环境,在模板中可以直接引用到该页面模型中的所有元素和间接调用该页面模型的子模型或者父模型,然后按照页面排版将元素填充进去。
其中模板语言会对HTML标签和JS等语法标签进行自动转义,上线后有利于项目的安全性。项目可以对工程公共部分进行重载,仅对页面部分进行修改(比如主页)再使用继承,避免大量重复代码,降低冗余性。
管理员进入校园信息分享系统后台,可选择需要修改的栏目。界面效果如图4所示。普通学生用户进入首页选择自己关注的栏目进行相关查询操作。普通用户首页如图5所示。
4.3 自定义搜索模块
Wagtail不仅提供了一个全面可扩展的搜索应用,也提供了一个快捷方式search()和QuerySet方法。自定義数据模型[6]可以通过 search方法在搜索后台直接查询。
以自定义查询Message类的实例对象中通过关键字“Student”搜索实例对象The excellent Student为例,其代码如下:
>>>from myapp.models import Message
>>>from wagtail.wagtailsearch.backends
import get_search_backend# Search Messages
>>> s=get_search_backend()
>>> s.search("Student",Message)
>>>[
5 结束语
采用基于Wagtail框架开发,不仅大大推进了构建动态系统的开发流程,而且降低了客户端的负载,结构简单、组织清晰。目前校园信息分享系统上线前期已取得一定的反响,成功汇总大约三万字的校园学生事务信息问题详情,为师生提供了问题解答帮助。由于系统的局限性仍很大,还不能够有效地自动获取校园内各官网公布的消息。所以未来分享系统的“一个中心+N个领域”的战略模式:搭建专业全面的校园学生事务信息系统,立足于及时、准确地提供最新、最权威、最丰富的信息咨询。
参考文献
[1] 毛佳,胡勇,阎覃,等. 高校社团服务平台的设计与开发[J]. 电子技术与软件工程,2017(12):44-45.
[2] 张良均,王路,谭立云,等. Python数据分析与挖掘实战[M]. 北京:机械工业出版社,2015.
[3] 陈红茜, 孟超英, 邱小彬, 等. 基于Django的高校合同制人员管理系统[J]. 华东师范大学学报 (自然科学版) , 2015 (S1) :464-470.
[4] 魏笑笑,王小正,王圣滔,等. 基于Spark 的校园信息分析系统的设计与实现[J]. 软件,2017,38(10):94-99.
[5] 董海兰. 基于Python的非结构化数据检索系统的设计与实现[D]. 南京:南京邮电大学,2017.
[6] 濮文强,曹磊,夏斌. 基于Django框架的关键词排名监控系统设计[J]. 微型机与应用,2017,36(20):97-100.
[7] 邵娟,陈丽. 中美高校学生事务管理比较研究的启示与思考[J]. 高教论坛,2017(1):125-128.