基于Python+Flask+MySQL的知宝问答系统

|

范路桥,段班祥,高 洁,刘小强

(广东科学技术职业学院计算机工程技术学院,广州 510640)

近年来,以Internet 为核心的网络技术和通信技术得到了飞速的发展和广泛的应用,随着广大网民对知识的获取需要和主动学习意愿增强,传统的信息资源的获取及服务方式已无法满足人们日益扩大化和多元化的信息需求。多元化的网络传播媒介丰富了人们获取信息的来源,各种网络交流与互动工具应运而生[1],知识社区问答新兴网络平台快速发展,特别是知识社区深受网民欢迎[2]。

利用HTML、CSS、JavaScript 搭建展示页面和处理前端请求,通过Bootstrap响应式布局,使用MySQL 存取系统数据,结合Flask 编写后端业务逻辑并对MySQL 数据库中的数据做出相应操作[3],设计和开发了一个集网络社区、普及百科、资讯平台于一体的知识社区平台,满足了网民获取知识、展示自我、掌握资讯的需求[4]。

1.1 系统总体目标

(1)本项目为知宝问答系统,分为知宝百科、知宝问答和最新资讯三个板块。

(2)知宝百科板块是对技术、事件、事物等各种百科词条知识的普及记载。

(3)知宝问答板块向社区全员展示,每个人都可以在其中提出自己的疑问、分享自己的观点。

(4)最新资讯板块是全球突发事件、全球疫情、全球股市、全球军事、全球科技的7*24 小时内的最新消息。

知宝问答系统的系统功能如图1所示。

图1 系统功能图

1.2 系统功能需求

本系统为知宝问答系统,主要为用户网络交流、知识交互、知识获取、资讯掌握功能。根据这些需求,要设计出页面美观而且操作良好的系统,并且需要对数据库的设计进行优化,此外Flask后端需要提高稳定性和运行速度。

(1)用户注册账号,并在登录后才能使用本系统。

(2)用户登录后将跳转到首页,首页是系统的展示以及介绍,并提供退出登录功能。

(3)知宝百科

“知宝百科”首页随机展示六个百科词条,每个百科词条都可通过用户点击详情供用户查阅。用户可点击按钮,更换主页展示的百科词条。用户编辑的词条通过审核后,可上传到社区。

(4)知宝问答

“知宝问答”首页展示社区用户的提问,以及对应的其他用户的观点分享与解答。每个用户都可提问或分享自己的观点。用户可以查询问题,找到与自己相符合的疑问内容。用户可以收藏问答,并且在用户主页中找到自己收藏的问答。

(5)最新资讯

“最新资讯”的首页默认展示全球突发事件,用户可以切换其他模块:全球疫情、全球股市、全球军事、全球科技。用户也可以在每个资讯下分享自己的观点,与他人交流。

(6)我的主页

“我的主页”页面展示用户个人提出的问题以及用户收藏的问答。

知宝问答系统架构图如图2所示。

图2 系统架构图

本系统有三大板块,需要大量的数据支撑,数据量多,业务关系也比较复杂,这要求数据存储方面及数据管理系统有良好的设计。系统共设计了用户表、百科表、问题表、问答答案表、资讯表、用户评论表、收藏表共七个数据表。为节省篇幅,给出前两个数据表的具体设计,见表1和表2。

表1 用户表(user)

表2 百科表(baike)

本系统基于B/S架构构建,借助Python中的Request、Scrapy等库完成数据的采集工作,并使用Pandas程序库进行数据的分析和计算工作,处理以后的数据被推送至MySQL数据库中。后台采用Flask 框架实现数据接口功能,并将MySQL 数据库中数据推送至前端页面。前端主要采用HTML、JavaScript、CSS 相结合,用户登录后可以点击各个模块使用,每个环节通过Flask 与MySQL进行交互[5],并可在前端展示数据。

3.1 首页与注册登录模块实现

用户在使用本系统前,要求先登录首页。系统除首页外的每个页面都使用装饰器添加了“判断用户是否已经登录”的功能,如果用户未登录,会被强制重定向到注册登录页面。

3.1.1 首页实现

首页涉及文件index.html和main.py。系统首页为index.html。当用户未登录时,会显示“登录/注册”按钮。当用户登录后,显示“欢迎您:xxx”与“注销”按钮。利用后端Flask增加用户的Cookie 和Session 实现。用户未登录时及用户未登录后的具体效果图如图3、图4所示。

图3 用户未登录时的首页

图4 用户登录后的首页

判断用户能否正常登录的核心代码如下。

3.1.2 注册页面实现

注册页面涉及文件:regist.html 和main.py。注册页面为regist.html,该模板文件采用了Java-Script 和CSS 进行页面的特效制作,会自动跟随鼠标移动,展示星星连线特效(如图5输入框左侧的星星连线)。用户如果已经拥有账号,也可点击“已有账号”按钮,直接跳转到登录页面。注册页面效果如图5所示。

图5 注册页面

用户输入手机号码、用户名、密码,点击“注册”按钮后,会跳转到后端main.py 中的视图函数regist。视图函数会判断手机号是否已经被注册以及两次输入的密码是否相同。如果判断失败,则会不通过注册;
如果判断成功,则将信息写入数据库中,并跳转到登录页面。注册页面的核心代码如下。

3.1.3 登录页面实现

登录页面涉及文件login.html、error.html、main.py。其中登录页面为login.html,登录页面效果如图6所示。用户输入账号和密码,点击“登录”按钮后,会跳转到后端main.py 中的视图函数login中,视图函数中会连接数据库判断用户输入的账号和密码是否正确。如果正确,则跳转到首页;
否则跳转到登录失败页面error.html。登录页面的核心代码如下。

图6 登录页面

登录失败页面为error.html,如果用户输入的账号或密码错误,将跳转到登录失败页面。主要是使用JavaScript 制作页面弹窗,登录失败弹窗如图7所示。

图7 登录失败弹窗

3.1.4 注销功能实现

注销功能涉及文件main.py。当用户登录后,在首页中点击“注销”按钮时,用户退出登录,并重新跳转到登录页面。用户点击“注销”按钮后,将跳转到main.py 中的logout 函数,该函数将此用户的cookie 和session 删除,然后重定向到登录页面。注销功能的核心代码如下。

3.2 知宝百科模块实现

3.2.1 知宝百科首页

知宝百科首页涉及文件baike.html。完成展示模块介绍信息,显示“用户自己编辑百科”按钮,以及提供导航栏使得可跳转到其他页面。知宝百科首页如图8所示。

图8 知宝百科首页

3.2.2 百科概要数据展示区域

百科概要数据展示涉及文件baike.html 和main.py。主要完成展示简要的百科数据,供用户浏览并且可以点击查看详细的百科内容,用户想换一批百科内容时可点击“换一批”按钮。具体效果如图9所示。

图9 知宝百科展示页面

当用户需要查看百科概要数据时,将跳转到main.py 中的百科函数。该函数将使用随机数充当百科id,从数据库中随机读取6 个百科数据,传递到前端将数据展示。百科概要数据展示的核心代码如下所示。

3.3 知宝问答模块实现

3.3.1 导航栏及封面

导航栏及封面涉及文件wenda.html。完成展示模块介绍信息,显示“我也要提问”按钮,以及提供导航栏使得可以跳转到其他页面。效果如图10所示。

图10 知宝问答首页

3.3.2 问题概要数据展示区域

问题概要数据展示涉及文件wenda.html 和main.py。主要完成展示简要的问题数据,供用户浏览,并且可以点击查看详细的问答内容,用户还可以输入内容后点击“查找”按钮,查询自己关心的话题。效果如图11所示,核心代码如下。

图11 知宝问答展示页面

3.3.3 详细问答展示

详细问答展示涉及文件wendadesc.html 和main.py。当用户点击某个问题希望浏览其具体观点时,展示详细数据供用户阅读。用户可对这个问题发表自己的观点、收藏此问答。效果如图12所示,详细问答展示的核心代码如下。

图12 知宝问答详情展示页面

3.3.4 用户新增回答

图13 用户新增回答页面

用户点击“立即回答”按钮后,Flask的addAnswer 函数将收集用户信息、问题信息、用户的回答内容及回答时间并保存到数据库中,用户新增回答的核心代码如下所示。

3.4 最新资讯模块实现

3.4.1 导航栏及封面

导航栏及封面涉及文件zixun.html。完成展示模块介绍信息、显示欢迎信息以及退出登录按钮,并且提供导航栏使得可以跳转到其他页面。最新资讯首页的效果如图14所示。

图14 最新资讯首页

3.4.2 资讯概要数据展示区域

资讯概要数据展示涉及文件zixun.html 和main.py。展示简要的资讯数据,供用户浏览并且可点击查看详细的资讯内容。分为五个模块:国际、疫情、宏观、股市、科技。后端会根据用户点击不同的模块,从数据库中读取不同模块的资讯数据进行展示。股市最新资讯展示页面的具体效果如图15所示,其它数据展示页面类似。

图15 股市最新资讯展示页面

由于版面限制,其它页面及代码没有详细介绍。

本文采用HTML、CSS、JavaScript 搭建展示页面和处理前端请求,通过Bootstrap 响应式布局,使用MySQL 存取系统数据,结合Flask 编写后端业务逻辑并对MySQL 数据库中的数据做出相应操作,设计并实现了一个集网络社区、普及百科、资讯平台为一体的知宝问答系统,系统具有知宝百科、知宝问答和最新资讯等三个板块,其强大的功能、良好的互动性、最新的资讯,在很大程度上满足了广大网民的展示自我、获取知识、掌握最新资讯的迫切需求。

猜你喜欢 百科资讯页面 刷新生活的页面保健医苑(2022年1期)2022-08-30答案动漫界·幼教365(中班)(2021年4期)2021-05-23让Word同时拥有横向页和纵向页电脑爱好者(2020年17期)2020-09-14资讯Information①中国-东盟博览(旅游版)(2020年8期)2020-08-19乐乐“画”百科创新作文(5-6年级)(2019年3期)2019-09-03探索百科小溪流(故事作文)(2014年6期)2014-07-31超有趣的互动百科智慧与创想(2013年10期)2013-11-28资讯人生与伴侣·共同关注(2009年18期)2009-08-31资讯中外会展(2009年6期)2009-08-07资讯全国新书目(2009年1期)2009-04-13

推荐访问:问答 系统 Python