基于Python + Flask+ Mysq实现简易留言板

devtools/2025/3/16 2:41:01/

使用Python + Flask+ Mysql实现简易留言板,包括网友编辑留言、修改留言,删除留言、分页显示四大功能。

写出留言板建设过程,包括开发使用工具、留言板模块设计、数据库设计、页面设计、关键技术。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

留言板建设过程总结

一.开发使用工具

  1. Python: 作为后端编程语言,负责处理业务逻辑。

  2. Flask: 轻量级的Web框架,用于快速构建Web应用。

  3. MySQL: 关系型数据库管理系统,用于存储留言板的数据。

  4. Navicat: Navicat是一款强大的数据库管理和开发工具,支持多种数据库管理系统。

  5. PyCharm:PyCharm是由JetBrains开发的一款强大的Python集成开发环境(IDE)。它专为提高Python开发效率而设计,提供了一系列专业功能,让编程工作更加高效、舒适。

  6. VS Code:Visual Studio Code(简称VS Code)是微软开发的一款免费、开源的源代码编辑器,它支持几乎所有的主流编程语言,包括但不限于Python、JavaScript、C++、Java等。VS Code以其轻量级、强大、高度可定制的特性,迅速成为了许多开发者首选的开发工具。

二.留言板模块设计

目录设计

d----- 2024/6/7 21:12 templates
-a---- 2024/6/7 21:26 2665 app.py

首页分页显示留言 (@app.route('/'))
  • 获取请求参数中的页码数,默认为1,每页显示的消息数量固定为5。
  • 创建游标cur以执行SQL。
  • 执行SQL查询以获取当前页的留言数据,按创建时间降序排列,并使用LIMIT和OFFSET进行分页。
  • 查询总留言数。
  • 游标关闭,渲染并返回index.html,将留言数据、总留言数、当前页码和每页显示的消息数量传给模板。
添加留言 (@app.route('/add', methods=['POST']))
  • 处理POST请求,从表单中获取留言内容。
  • 使用游标执行SQL语句,将留言内容插入到messages表中。
  • 提交事务以保存更改,关闭游标。
  • 使用flash函数向用户显示操作成功的消息,并重定向回首页。
编辑留言 (@app.route('/edit/<int:message_id>', methods=['GET', 'POST']))
  • 根据URL中的message_id处理GET和POST请求。
    • GET请求:查询指定ID的留言信息,并渲染edit.html模板,将留言信息传入以便用户编辑。
    • POST请求:获取表单中的留言内容,执行SQL更新对应ID的留言内容。
    • 提交事务,显示成功消息,并重定向回首页。
删除留言 (@app.route('/delete/<int:message_id>'))
  • 根据URL中的message_id执行SQL语句,删除对应的留言记录。
  • 提交事务,显示删除成功的消息,然后重定向回首页。
主运行块 (if __name__ == '__main__':)
  • 确保直接运行此脚本时启动Flask应用,而非作为模块导入。
  • 设置debug=True开启调试模式,便于开发过程中查看错误信息和自动重启服务。

这段代码展示了如何在Flask应用中与MySQL数据库交互,实现基本的CRUD(创建(Create)、读取(Retrieve)、更新(Update)、删除(Delete))操作,并利用Flask的模板引擎渲染动态页面。

  1. 首页

    • 显示所有留言,采用分页技术进行展示。
    • 提供留言编辑和提交功能。
  2. 留言编辑页

    • 展示当前用户已发布的留言。
    • 提供修改和删除留言的功能。

三.数据库设计

CREATE DATABASE message_board;
USE message_board;CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY,content TEXT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. 留言表 (messages):
  • id: 这是一个整数类型的字段,用于唯一标识每一条留言记录。AUTO_INCREMENT 表示每次插入新记录时,该字段的值会自动增加,而不需要手动指定。PRIMARY KEY 定义该字段为主键,主键在一个表中必须唯一且不能为NULL。

  • content: 这是一个文本类型字段,用于存储留言的具体内容。TEXT 类型适合存储大量的文本数据,远比 VARCHAR 类型能存的字符数量多。NOT NULL 约束意味着这个字段在插入数据时必须有值,不能为空。

  • created_at: 这是一个时间戳类型的字段,用于记录留言创建的时间。TIMESTAMP 类型可以精确到秒,并且 DEFAULT CURRENT_TIMESTAMP 指定了当插入新记录时,如果这个字段没有给定值,就自动采用当前的时间戳作为其值。

配置MySQL数据库连接信息

python">app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'your_password'
app.config['MYSQL_DB'] = 'message_board'
app.config['MYSQL_PORT'] = 3308 # 设置端口号
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'
mysql = MySQL(app)
  • app.config['MYSQL_HOST'] = 'localhost': 指定MySQL服务器的地址,这里设置为本地主机(即在同一台机器上运行的MySQL服务)。如果是远程服务器,则需要替换为相应的IP地址或域名。

  • app.config['MYSQL_USER'] = 'root': 设置访问MySQL数据库的用户名为root。root用户通常是MySQL的默认管理员账户,拥有所有权限。在生产环境中,出于安全考虑,应避免使用root账户,而是创建具有有限权限的专用账户。

  • app.config['MYSQL_PASSWORD'] = 'your_password': 设置访问数据库所需的密码。your_password应该替换为实际的MySQL root用户的密码。注意:在实际应用中,直接硬编码密码是不安全的做法,尤其是当代码可能被他人查看时。考虑使用环境变量或其他安全方式来管理敏感信息。

  • app.config['MYSQL_DB'] = 'message_board': 指定要连接的数据库名称为message_board。在使用前,确保该数据库已在MySQL服务器上创建。

  • app.config['MYSQL_CURSORCLASS'] = 'DictCursor': 设置MySQL游标的类为DictCursor。这意味着从查询结果中获取的数据将以字典形式呈现,其中列名作为键,列值作为值。这使得在Python代码中通过列名访问数据变得非常直观和方便。

  • mysql = MySQL(app): 初始化MySQL对象,并将其与Flask应用实例关联。这里MySQL应该是之前通过from flask_mysqldb import MySQL导入的。这个步骤实际上建立了Flask应用和MySQL数据库之间的连接桥梁,使得之后可以通过mysql.connection等方式执行SQL操作。

四.页面设计

五.关键技术

  1. 路由定义: 使用Flask的@app.route()装饰器定义URL路由,处理GET和POST请求。
  2. 模板渲染: 利用Jinja2模板引擎动态生成HTML页面,传递变量和执行逻辑控制。
  3. 数据库操作: 通过SQLAlchemy ORM进行数据库的增删改查操作,包括模型定义、会话管理和事务处理。
  4. 表单处理: Flask-WTF用于创建表单类,定义字段、验证规则,以及处理用户提交的数据。
  5. 分页功能: 实现分页查询,通常结合SQLAlchemy的Limit和Offset方法,以及前端的分页导航UI。
  6. 安全措施: 对用户输入进行校验和清理,防止SQL注入和XSS攻击;使用WTForms进行表单验证,确保数据的有效性。
  7. 错误处理: 实现基本的错误处理机制,比如404页面未找到、500服务器内部错误的定制化返回。

http://www.ppmy.cn/devtools/48420.html

相关文章

MySQL(5)

聚合函数 GROUP BY 的使用 需求&#xff1a;查询各个部门的平均工资&#xff0c;最高工资SELECT department_id,AVG(salary),SUM(salary)FROM employeesGROUP BY department_id;需求&#xff1a;查询各个job_id的平均工资SELECT job_id,AVG(salary)FROM employeesGROUP BY jo…

使用GPT-soVITS再4060下2小时训练声音模型以及处理断句带来的声音模糊问题

B站UP主视频 感谢UP主“白菜工厂1145号员工”的“熟肉”&#xff0c;我这篇笔记就不展示整一个训练和推理流程&#xff0c;重点写的4060该注意的一些事项。如何解决断句模糊的问题&#xff0c;在本篇笔记的最末尾。 相关连接&#xff1a; 原项目github UP主的说明文档 1、训…

Linux-笔记 全志平台OTG虚拟 串口、网口、U盘笔记

前言&#xff1a; 此文章方法适用于全志通用平台&#xff0c;并且三种虚拟功能同一时间只能使用一个&#xff0c;原因是此3种功能都是内核USB Gadget precomposed configurations的其中一个选项&#xff0c;只能单选&#xff0c;不能多选&#xff0c;而且不能通过修改配置文件去…

Django中使用下拉列表过滤HTML表格数据

在Django中&#xff0c;你可以使用下拉列表&#xff08;即选择框&#xff09;来过滤HTML表格中的数据。这通常涉及两个主要步骤&#xff1a;创建过滤表单和处理过滤逻辑。 创建过滤表单 首先&#xff0c;你需要创建一个表单&#xff0c;用于接收用户选择的过滤条件。这个表单可…

Java 对象(列表)复制【工具类】

Java当中常常会遇到对象的复制或者列表对象的复制&#xff0c;准备了一份工具类供大家参考&#xff1a; import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils;import java.util.ArrayList; import java.util.List; import java.uti…

【数组】【双指针】三数之和

打算冲一把算法类比赛&#xff0c;之前一直对算法提不起兴趣&#xff0c;也有我自己对它的抵触&#xff0c;本身算法也比较菜。 但现在打算勤勤恳恳刷题&#xff0c;踏踏实实总结&#xff0c;冲&#xff01; 数组——双指针 三数之和 该题力扣网址 错误做法 三重循环框架&a…

tp6+swoole+mysql+nginx+redis高并发优化

1.服务器 IDC机房提供的物理机&#xff1a;单机 40核&#xff0c;64G内存&#xff0c;带宽100M&#xff0c; 2.redis 7.2配置 timeout600 #空闲连接超时时间,0表示不断开 maxclients100000 #最大连接数 3.Mysql 5.7配置&#xff0c;按宝塔16-32G优化方案并调整&#xff1a;…

Web前端笔记:深入探索与实战精髓

Web前端笔记&#xff1a;深入探索与实战精髓 Web前端&#xff0c;作为构建互联网世界的基石之一&#xff0c;承载了用户与网页交互的桥梁作用。对于前端开发者而言&#xff0c;不断积累与更新自己的知识体系显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面&…