APP下载

基于uni-app和PHP开发的SouTool查课微信小程序

2024-12-31闵慧刘剑华

现代信息科技 2024年12期

摘" 要:为解决校外查课既困难又烦琐的问题,开发一款SouTool查课微信小程序。通过先进技术的运用可给用户带来高效、便捷的查课体验,赢得师生的广泛赞誉。系统采用uni-app框架,实现了跨平台稳定运行。使用Python爬虫技术从教务系统中快速抓取课表信息。此外,MySQL数据库、Redis缓存以及PHP后端技术的运用,确保了数据的存储安全、查询便捷以及业务逻辑的稳定实现。用户在微信客户端打开小程序即可获取课程信息,从而摆脱错过课程的烦恼。

关键词:查课微信小程序;uni-app;Python;PHP

中图分类号:TP311.5" 文献标识码:A" 文章编号:2096-4706(2024)12-0105-05

SouTool Course Checking WeChat Mini Program Developed Based on uni-app and PHP

MIN Hui, LIU Jianhua

(School of Software, Hunan College of Information, Changsha" 410200, China)

Abstract: To solve the problem of difficult and tedious extracurricular course checking, it develops a “SouTool” course checking WeChat Mini Program. The application of advanced technology can bring users an efficient and convenient course checking experience, winning widespread praise from teachers and students. The system adopts the uni-app framework, achieving stable cross platform operation. It uses Python crawler technology to quickly retrieve schedule information from the educational administration system. In addition, the application of MySQL database, Redis cache, and PHP backend technology ensures the security of data storage, convenient querying, and stable implementation of business logic. Users can access course information by opening the Mini Program on the WeChat client, thus eliminating the hassle of missing courses.

Keywords: course checking WeChat Mini Program; uni-app; Python; PHP

0" 引" 言

十八大以来,习近平总书记围绕筑牢国家网络安全屏障发表了一系列重要论述,多次强调没有网络安全就没有国家安全[1]。湖南信息职业技术学院高度重视网络安全和信息化管理工作。教务管理系统作为网络安全管理的重要组成部分,学院通过限定访问的方式来加强对系统的有效管理。当前,可以通过两种方式访问该教务管理系统:

1)用户在校内可以通过登录校园网的方式进入教务管理系统进行相关操作。

2)用户在校外则可以通过VPN远程访问的方式登录教务管理系统进行相关操作。

两种方式对于老师和学生来说都不是很便捷,鉴于此,本文设计一款名为SouTool的查课微信小程序。该程序通过Python技术自动爬取学校教务管理系统官网上的数据,并将这些数据存储于自己的服务器中。用户打开微信客户端,进入SouTool查课小程序后即可查看自己的课表,这样可避免遗漏课程。

1" 系统简介

SouTool查课微信小程序是一款高效便捷的课程信息查询工具,提供对学生课表、教师课表、教室课表、学生日历课表、教师日历课表及课程安排等项目的查询功能。系统的功能结构如图1所示。自上线以来,SouTool查课小程序受到广大师生的热烈欢迎,累计用户数已达1.68万,日均启用2万多次。小程序后台访问数据如图2所示。

2" 系统技术方案

SouTool查课小程序使用跨平台框架uni-app进行开发,并借助uni-app生态中的一流UI框架——uView2进行视觉美化。程序的核心部分采用了Python爬虫技术,自动从学校的教务管理系统中获取课表数据。为了保证数据的安全存储和处理,系统使用了MySQL数据库。此外,后端还引入了Redis缓存系统,缓存查询过的数据,提高查询效率。最后,系统利用PHP技术来处理和实现程序的各种业务逻辑。

系统所有技术如下:

1)uni-app框架。uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式),以及各种小程序(微信、支付宝、百度、头条、飞书、QQ、快手、钉钉、淘宝)、快应用等多个平台[2]。

2)PHP语言。超级文本预处理语言PHP(Hypertext Preprocessor)是一种HTML嵌入式的脚本语言,适用于Web开发领域[3]。PHP应用范围较广,它具有开源、免费、跨平台、面向对象、支持多种数据库等特点[4]。

3)Redis缓存系统。Redis是一种开源的、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,它提供多种语言API,具备高度的灵活性和效率性[5]。

4)Python语言。Python语言是目前广受喜爱的程序设计语言之一,广泛应用于管理任务和科学计算方面[6]。它简单易学,拥有许多标准库,在Windows或Unix等平台具有很好的兼容性[7,8]。

3" 系统数据库设计

系统共有7个数据库表,分别为班级表、教师表、教室表、课程安排表、轮播图表、课程表、公告表。各表之间的关联关系如图3所示。

其中:

1)班级表用于记录各个班级的详细信息,包括班级ID、班级名称、年级和专业等关键字段。

2)教师表记录每位教师的信息,包括教师ID、教师名称和别名等字段。

3)教室表用于存储教室的相关信息,包括教室ID、教室名称、教室地点以及教室别名等字段。

4)课程安排表是关于课程安排的关键信息表,其中包含课程安排ID、课程名称、年级、专业名称、学院、学分、课时和总课时等字段。

5)轮播图表用于存储轮播图的相关信息,包括轮播图ID、轮播图地址和跳转地址等字段。

6)课程表是课程、班级与教师的连接桥梁,其中包含课程ID、课程名称、班级ID和教师ID等关键字段。

7)公告表用于存储公告的详细内容,包括公告ID和公告内容等字段。

4" 小程序部分功能实现

4.1" 授权页

用户首次启动SouTool查课微信小程序时,需要进行微信授权登录,以确保账户的安全性和隐私保护。授权登录页面如图4(a)所示,用户只需点击“确定”按钮即可完成授权和登录,登录页面如图4(b)所示。值得一提的是,授权请求仅在用户首次登录时出现,后续再次进入小程序无须重复授权。一旦用户完成授权操作,系统即可获取用户的头像和昵称信息,以便为用户提供更为个性化的服务体验。

4.2" 首页及学生课表页

用户成功完成授权后将进入首页,用户可在首页中心位置看到当天的课程表,如图5(a)所示。首页中部分布着程序的各大功能模块入口,用户只需点击某功能入口即可进入对应的功能页面。例如,用户点击“学生课表”功能入口后将进入学生课表查询页,页面效果如图5(b)所示。

在课表查询页中,下方位置设有日期、上一周和下一周的链接。用户单击日期后会弹出日期选择控件,他们可以随意选择日期,查看所选日期该班级的课程表。同样地,通过单击上一周或下一周的链接,用户能够查看该班级上一周或下一周的课表。

课表查询页上方正中央位置会显示班级名称。用户单击班级名称后会弹出班级选择页,页面效果如图5(c)所示。在班级选择页中,用户可以选择任意班级查询该班级的课程表。

4.3" 教师课表页及教室课表页

教师课表页和教室课表页分别用于查询教师课表和教室课表,页面效果如图6(a)和6(b)所示。单击图6(a)上方的教师姓名可进入教师选择页,如图6(c)所示,选择任意教师可查看该教师的课表;单击图6(b)上方的教室名可进入教室选择页,切换教室选择页面中央的日期,可以查看所选日期该教室的课表信息。教室选择页下方显示上一周和下一周链接,单击相应链接可查看该教室上一周和下一周的课表。

4.4" 教师日历课表和教学计划安排

教师日历课表可供用户查看教师当月的课表及其任意月份的课表,课表以日历表盘的方式显示,效果如图7(a)所示。日历表盘中红点标记表示该日期有课,绿点标记表示该日期无课。单击任意一个有课日期,下方会出现当天具体的课表信息。学生日历课表和教师日历课表相似,在此不再赘述。

教学计划模块可供用户查看各专业、各年级的授课计划,方便学生有的放矢地进行下一阶段课程的提前学习。教学计划页效果如图7(b)所示。选择授课专业和授课年级,单击查询按钮可查看该专业指定年级的教学内容。

教学计划部分前端代码如下:

lt;view class=\"title\" @click=\"CliSelect\"gt;

{{name}}(本月有{{days.dayCount}}天有课,总共有{{days.dayCounts}}节课)

lt;/viewgt;

lt;view class=\"calendar\"gt;

lt;courseCalendar@change=\"change\" @switch=

\"swich\" :lunar=\"true\" :selected=\"select\" @create=\"init\"gt;

lt;/courseCalendargt;

lt;/viewgt;

lt;view class=\"klist\"gt;

lt;uni-section :title=\"ktitle\" type=\"line\"gt;

lt;uni-card :title=\"item.bname\" :extra=\"item.name\" v-for=\"item in klist\"gt;

lt;text class=\"uni-body\"gt;第{{item.lesson}}节课 - {{item.kname}} - {{item.addr}}lt;/textgt;

lt;/uni-cardgt;

lt;/uni-sectiongt;

lt;/viewgt;

5" 系统关键技术

该系统存在两大关键技术难题,一是如何高效获取课表数据,二是如何提高系统的响应速度。为了及时更新课表数据,同时避免给教务系统服务器带来过大的压力,采用定时任务[9]和Python爬虫服务来获取教务系统中的课表数据。具体来说,系统默认每10分钟通过爬虫服务向教务系统获取一次课表数据,具体步骤如下:

1)设定每10分钟请求一次数据。

2)系统获取相关数据。

3)使用正则表达式[10]对数据进行清洗和处理。

4)将清洗后的数据存储到内网数据库中。随后,内网服务器会将内网数据库中的课表数据实时推送到外网服务器,供SouTool查课小程序查询使用。

课表数据获取的部分代码如下:

import time

from apscheduler.schedulers.blocking import BlockingScheduler

from kebiao import UpdateKebiao

sched = BlockingScheduler(timezone='Asia/Shanghai')

def Update():

hour = time.strftime(\"%H\", time.localtime(time.time()))

if list(range(7, 24)).count(int(hour)) == 0:

print(hour + \"h,免更新\")

return

UpdateKebiao()

Update()

sched.add_job(Update, 'interval', minutes=10, max_instances=6)

sched.start()

由于本系统主要是一个查询系统,不需要进行更新、修改等操作,因此采用Redis缓存技术来提高系统的响应速度。具体来说,当SouTool查课小程序向后台请求课表数据时,Redis会查询缓存中是否存在该数据,如果存在直接返回课表数据,否则系统会查询MySQL数据库,并将查询到的结果同步到Redis缓存中。最终系统将查询到的JSON数据返回给SouTool查课小程序。

6" 结" 论

本文介绍了基于uni-app和PHP开发的SouTool查课微信小程序,该小程序可以帮助用户解决校外查课困难且烦琐的问题。文章对系统的技术方案、数据库设计、部分功能的实现以及关键技术进行了详细的阐述。通过uni-app框架、Python爬虫技术、MySQL数据库、Redis缓存系统和PHP技术的运用,小程序实现了跨平台稳定运行、快速抓取课表信息、安全存储数据以及提高课表查询效率的目标。

参考文献:

[1] 中央网络安全和信息化委员会办公室,中华人民共和国国家互联网信息办公室.习近平:没有网络安全就没有国家安全 [EB/OL].[2023-11-10].https://www.cac.gov.cn/2023-07/14/c_1690986718786673.htm.

[2] 殷庆龙,尚立学,王辉.电机维修管理APP的设计与实践 [J].工业控制计算机,2023,36(9):23-24.

[3] 胡建伟,赵伟,崔艳鹏,等.一种改进ASTNN网络的PHP代码漏洞挖掘方法 [J].西安电子科技大学学报,2020,47(6):164-173.

[4] 张日花,刘婷婷,陈红娟.基于PHP+MySQL的在线相册设计与实现 [J].现代信息科技,2023,7(7):15-19.

[5] 赵维娜,孙博,潘墨尧,等.基于Redis缓存技术的APS系统架构设计 [J].河北冶金,2023(S1):55-57.

[6] 周竞鸿,聂菊荣.基于微信小程序的Python语言学习平台设计与实现 [J].信息记录材料,2023,24(4):201-203.

[7] 姜秋香,郭伟鹏,王子龙,等.Python语言在水文水资源领域中的应用与展望 [J].计算机工程与应用,2023,59(9):46-58.

[8] 崔北元,李金良,孙梅芳.信息技术助力高中物理试题讲评可视化——以Python为例 [J].物理教师,2022,43(7):64-67.

[9] 林中霖,时金桥,王美琪,等.基于应用行为划分的Android恶意应用检测技术 [J].计算机工程,2023,49(9):125-136.

[10] 杜瑞庆,李一诺,黎作鹏.基于Vue和SpringBoot的C语言程序在线测评系统的设计与实现 [J].唐山师范学院学报,2023,45(3):58-63.

作者简介:闵慧(1987—),女,汉族,湖南湘潭人,讲师,硕士,研究方向:软件开发。