基于python flask 实现留言板系统登陆注册 毕业设计 附完整代码

简介: 基于python flask 实现留言板系统登陆注册 毕业设计 附完整代码

完整代码:https://download.csdn.net/download/qq_38735017/87382415


题目描述


用户登陆后能发布留言,能对自己发布的留言进行管理,能查看分页显示留言列表。

能根据留言的发布者,和留言内容,做模糊查询


功能设计


登录与注册

用户通过用户名、昵称、密码进行注册

用户通过用户名、密码进行登录

用户登录状态的保持


留言发布


  • 留言标题
  • 留言内容(富文本
  • 留言分类
  • 保存留言草稿


留言阅读与评论

  • 留言评论(回复评论)
  • 留言阅读量
  • 留言回复量

个人信息管理

  • 显示用户注册时长
  • 上传头像
  • 修改昵称
  • 修改密码

个人留言管理

  • 留言修改
  • 留言隐藏
  • 评论管理
  • 我的消息(对我留言的评论,对我评论的回复)

全局搜索

  • 模糊搜索所有可见留言
  • 模糊搜索用户
  • 详细设计
  • 数据库设计
  • 表 2.1.1 user 用户表(标蓝约束非数据库约束,由后端程序控制)


image.png


表 2.1.2 message 留言表



image.png

image.png


表 2.1.3 comment 评论表

image.png


使用的框架和库

前端:

Bootstrap--用于为组件提供美观的外观Bootbox--Bootstrap插件,用于显示美观的对话框JQuery--用于简化JavaScript操作MD5--用于对密码传输进行加密UEditor--百度富文本编辑器,用于对留言内容的编辑


后端

Flask--PythonWeb框架SQLAlchemy--数据库ORMJinja2--模板引擎,用于后端渲染页面mysql-connector-python--MySQL


程序结构


程序采用 MVC 架构,以业务逻辑、数据、显示界面分离的方式组织代码,保证了代码的可读性和可扩展性。


Model 使用 SQLAlchemy 映射到数据库,将用户数据持久化到数据库,并提供数据存取的接口; 前端页面 View 由 Jinja2 渲染,将数据显示给用户,并接受用户的输入;Controller 负责 Model 和 View 间的同步,当用户发出请求时,Controller 从 Model 中读取数据更新 View,用户输入数据时,Controller 检查数据的合理性并将数据更新到 Model。


最终项目结构如下:


9498dad63748e8e72128ff485e802708.png


图 2.3.1 Model 按映射的数据库表进行分类


b6ceba633b29be274d53aa43fca943d6.png


图 2.3.2 View 按页面进行分类

e85d81de56eef54c6a0a6bb23f06f3ca.png


图 2.3.3 Controller 按服务功能进行分类


功能介绍


登录与注册


首先用户在未登录状态下访问任何需要登录的页面,将自动重定向到登录页面,在登录完成后将自动重定向回原来要访问的页面,原页面地址保存在查询参数 from 中,如图 3.1.1 所示:


a76e0424d1a2b37a39319aaa8772f9e1.png


图 3.1.1 重定向到登录页面功能

在未登录状态,可以访问的页面右上角均有注册按钮,单击注册按钮将跳转到注册页面,注册完成后页面自动跳转到原来的页面,原页面地址保存在查询参数 from 中,如图 3.1.2 所示:


102d4a1013908a068a7504226146db16.png



图 3.1.2 注册页面

在注册时,需要输入用户名(用户名不可重复)、昵称、密码,并确认输入的密码,单击注册,会检查输入数据的合法性,若某项数据有误,将给出相应的提示,如图 3.1.3 和图 3.1.4 所示:

7536243481f9c6fbc2a5981961886a22.png


图 3.1.3 确认密码与密码不相同时给出的提示


2162e4285e44cd3a498200d4a196b9ad.png


图 3.1.4 用户名重复给出的提示

一旦提交了正确的数据,将提示注册成功,并且自动跳转到原来的页面。下一步,用户可以通过刚刚注册的账号进行登录,用户既可以在上文提到的自动重定向的登录页面登录,也可以点击页面右上角的登录按钮,在弹出的模态框中进行登录,如图 3.1.5 所示:

image.png


图 3.1.5 登录模态框


在登录模态框中,输入用户名和密码,单击登录尝试登录。如果输入数据非法或密码错误,同样会弹出提示,这里不太展示。另外,可以勾选“记住我”复选框,在下次访问页面时,将使用保存的 Cookie 自动进行登录验证,Cookie 有效期 30 天,30 天后需要再次手动登录刷新有效期限。登录成功后,页面给出提示,并自动刷新页面。登录后页面右上角将展示用户中心,如图 3.1.6 所示:

36d77cad3413aad41cc9339360c9bbb6.png



图 3.1.6 登录后右上角显示用户中心

留言发布

用户在登录后,在页面右上角出现留言发布按钮,单击此按钮进入留言发布界面,如图 3.2.1 所示:


1bb59135463898ea1650580f6204c908.png



图 3.2.1 留言发布页面


发布留言时,需要填写留言标题、留言内容,并选择留言类型。留言内容不只可以输入文字,而且支持多数富文本格式,如表情、动图、图片、表格以及各种格式化文本,如图 3.2.2 所示:

33d4062a96b1ecfefea34433dc9d4c99.png


图 3.2.2 留言的富文本编辑功能


用户编辑留言完成后,可选择存为草稿,待日后修改后再发布,也可以立即发布。单击发布留言按钮,若留言满足格式要求则发布成功,发布成功提示后自动跳转到留言阅读界面,以便作者观察效果是否符合预期,如图 3.2.3 所示:

55014f763f78bba339418d1e4fd94969.png


图 3.2.3 留言发布成功后自动跳转到阅读页面


留言阅读与评论


留言根据作者在发布时选择的类型分类显示,在首页,每个类型占据一个版块,版块显示目前最热门(根据回复数量排名)的前三条留言。版块顶部标明了留言分类名称和该分类下的留言数量,如图 3.3.1 所示:


6f642b1596e58e826fd110f88a4e9f88.png

图 3.3.1 首页显示热门留言


用户可以直接点击留言标题进入留言阅读界面,也可点击版块上方或右侧边栏分类名称,进入该分类下了留言列表界面,如单击学习交流区,进入学习交流分类的留言列表,如图 3.3.2 所示:


bb73cb1cf10ec223b2717c614536b9ad.png

图 3.3.2 分类留言列表界面


留言列表每页显示 10 条,以发布时间降序排列,页面最下方显示了分页按钮,点击后页面显示下一页内容,如图 3.3.3 和图 3.3.4 所示:


650c5242577a72cde91b0db6697996b1.png

图 3.3.3 页面底部显示分页按钮

c00f669d79b7a18c28fa9d5ac93235bf.png


图 3.3.4 列表显示下一页内容


点击留言标题进入留言阅读界面,界面与上文图 3.2.3 给出的相同。在阅读界面,显示留言作者、发布时间、阅读次数、回复次数等信息,同时可以在下方评论框对留言内容进行评论,评论发表后立即显示在留言下方评论区,如图 3.3.5 所示:

d8a6024409d1c879931c3279880d62f7.png


图 3.3.5 对留言进行评论


对于自己发表的评论,用户可以进行隐藏/显示的控制,对于所有一级评论,用户可以对评论进行回复,单击回复按钮,将弹出一个回复框,发表后回复显示在对应评论下方,如图 3.3.6 和图 3.3.7 所示:


ba0e18037496d44fc53050e46f8c0837.png

图 3.3.6 弹出的回复框

f2c8e924343f662951ad58d26eb43caf.png


图 3.3.7 回复显示在对应评论下方


评论同样分页显示,项目使用 AJAX 异步加载渲染评论,评论换页时不需要页面整体刷新。


个人信息管理


用户将鼠标悬停在右上角头像上,可唤出个人信息管理菜单,如图 3.4.1 所示:


2a7341ce6c89eaee22a6798343531a0b.png

图 3.4.1 个人信息管理下拉列表


单击注销按钮,可以退出登录当前账号,以便切换账号。单击个人中心按钮,进入个人信息管理页面,在该页面用户可以修改自己的昵称、头像和密码,如图 3.4.2 所示:

67480dceddfc6ac64834d8f7922ed8cd.png


图 3.4.2 个人中心


若需要修改昵称,在文本框输入新的昵称,点击保存按钮,若输入合法,则修改昵称成功,新昵称在用户昵称区显示。


若需要修改密码,进入修改密码 Tab,输入原密码和新密码进行密码更改,下次进入网站时需要重新输入密码手动登录。


若需要修改头像,点击修改头像按钮,弹出文件选择对话框,选择要上传的图片,若图片格式正确,则头像上传成功,页面显示新上传的头像,如图 3.4.3 和图 3.4.4 所示:


036ad6ccb177ccad861a2f9393ed0fef.png

图 3.4.3 文件选择对话框

3ab2803ce5ea846026d8b1f64b8ed53b.png


  • 图 3.4.4 更换的头像立即显示
  • 个人留言管理
  • 在上文图 3.4.1 所示的个人信息管理下拉列表中,还可以管理自己发布的留言(留言管理)、评论(评论管理),还可以看到别人给自己留言的评论和回复。


单击留言管理按钮,分页显示自己发布的所有留言,对于每条留言,可以进行隐藏/显示切换和修改操作。另外,如果一条留言是隐藏的,则会在标题前显示红色 hidden 标签,如果一条留言是草稿,则会在标题前显示黄色 drafted 标签,如图 3.5.1 所示:


6b7e7705edffcdcec4f306666c47065b.png

图 3.5.1 留言管理页面


单击评论管理按钮,分页显示自己发表过的所有评论,并显示回复的用户头像和昵称,以及评论发表的日期等信息,同样,自己的评论可以进行隐藏/显示切换,另外点击评论内容可以跳转到相应留言阅读界面,如图 3.5.2 所示:

7e64cc25db7b101bef6a83b1ec548612.png


图 3.5.2 评论管理页面


单击我的消息按钮,分页显示与我相关的评论和回复,点击评论内容可以进入相应留言阅读页面,如图 3.5.3 所示:


f62d712f8df1e4f27960d152ea478633.png

图 3.5.3 我的消息页面


全局搜索


点击任何页面上方导航栏的搜索按钮,可以进入全局内容搜索页面,如图 3.6.1 所示:


4201a07158715b5fd18e6ba48cf17751.png

图 3.6.1 全局搜索页面入口


搜索页面可以搜索留言,也可以搜素用户,默认搜索的是留言,都使用了模糊匹配的搜索方式。在搜索栏输入需要检索的关键词,敲击回车或点击搜索按钮进行留言搜索,将显示所有标题和内容包含关键字的留言,如图 3.6.2 所示:


09dcade11275b27d566b293caf9ba00e.png

图 3.6.2 搜索留言


若需要搜索用户,则点击搜索栏下方用户 Tab,将自动对关键字进行查询并显示结果,如图 3.6.3 所示:


f56f1095ede84b724cd573e8d3993ee2.png

图 3.6.3 搜索用户


搜索结果同样使用 AJAX 技术异步分页加载,不需要刷新整个页面即可显示搜索结果。


建议老师代码验证的步骤


数据库建立


项目下有建表脚本,bbs-demo/sql/setup.sql 包含项目需要的所有表以及测试数据,在运行项目前请老师先使用 source 命令或相关工具建立表结构:


source 所在路径\setup.sql


项目依赖


项目后端代码依赖的库和框架保存在 bbs-demo/requirements.txt 中,请老师使用 pip 或类似命令安装项目依赖:


pipinstall-rrequirements.txt

总结


项目难点及解决方案


难点:系统较复杂,若功能分层不合理将各模块循环引用,降低代码可读性、可扩展性不说,还极有可能导致 ImportError,当后期功能增多时,各功能模块耦合严重,ImportError 发生的可能大大增加。


解决方案:查阅了几种常见的 Web 项目代码组织方式和几种软件架构模式,选择了 Model-View-Controller 的软件架构,再结合 Flask 提供的模块化工具 Blueprint 类和 init_app()等方法,成功解决了循环引用问题,并获得了较为清晰的代码层次结构。


难点:原生的 HTML 组件难以做到美观。


解决方案:搭配使用了 CSS 和 Bootstrap 框架,使用了许多 Bootstrap 提供的简约美观的组件,解决了页面美观问题。


难点:纯后端渲染的页面不够灵活,比如分页时必须刷新整个页面,且得到的页面不够动态,用户交互感不足。


解决方案:利用两天的时间学习了 JS、CSS、jQuery 和 AJAX 技术,分页时使用 AJAX 异步动态获取数据,再使用 jQuery 局部刷新页面,解决了分页问题;利用 CSS 配合 JS 以及 jQuery 提供的简单动画,实现了前端交互的动态效果,如上文图 3.4.1 所示鼠标悬浮显示下拉菜单的效果,提高了页面交互感。


缺点和不足


原计划增加绑定安全邮箱和找回密码的功能,但低估了项目的难度,时间不足,只是增加了相应的页面,但并没有后端功能支持


有些页面加载需要多次访问数据库,有些页面刷新一次就要访问一次数据库,造成性能的降低,可以考虑增加缓存和页面静态化功能


收获


首先,这次课程设计不仅是对 Python 基础知识的全面检验,也一定程度上促使了我接触新的技术,为了做出美观的界面,我学习了 CSS 和 Bootstrap;为了给页面添加动态效果,我学习了 JS 和 AJAX;为了简化 JS 编程,我又学习了 jQuery。这让我加深了对前端代码的运行方式以及前后端的交互机理的理解,我想无论以后从事前端还是后端工作,这次课程设计的经历都会对我的工作有所帮助。


另外,独立完成一个实用的项目,是对我编程能力的一次巨大提升。通过这次机会,我把以前理解并不深刻的 MVC 架构模式用到了实际项目中,把 Python 的基础知识又翻出来重新巩固了一遍,锻炼到了对代码结构的组织能力和对编程知识的全面运用能力。而这是做小练习,编写一些支离破碎的代码片段,所锻炼不到的。


相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
20 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
25天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
245 55
|
6天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
2月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品安全追溯系统的深度学习模型
使用Python实现智能食品安全追溯系统的深度学习模型
77 4
|
13天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
109 66
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
172 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
3天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
18 3
|
15天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
47 5
|
1月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习的果蔬识别系统实现
果蔬识别系统,主要开发语言为Python,基于TensorFlow搭建ResNet卷积神经网络算法模型,通过对12种常见的果蔬('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜')图像数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django框架搭建Web网页端可视化操作界面,以下为项目实现介绍。
42 4
基于Python深度学习的果蔬识别系统实现
|
2月前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
88 2
从零开始构建员工管理系统:Python与SQLite3的完美结合