使用Python + Flask+ Mysql实现简易留言板,包括网友编辑留言、修改留言,删除留言、分页显示四大功能。
写出留言板建设过程,包括开发使用工具、留言板模块设计、数据库设计、页面设计、关键技术。
留言板建设过程总结
一.开发使用工具
-
Python: 作为后端编程语言,负责处理业务逻辑。
-
Flask: 轻量级的Web框架,用于快速构建Web应用。
-
MySQL: 关系型数据库管理系统,用于存储留言板的数据。
-
Navicat: Navicat是一款强大的数据库管理和开发工具,支持多种数据库管理系统。
-
PyCharm:PyCharm是由JetBrains开发的一款强大的Python集成开发环境(IDE)。它专为提高Python开发效率而设计,提供了一系列专业功能,让编程工作更加高效、舒适。
-
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的留言内容。
- 提交事务,显示成功消息,并重定向回首页。
- GET请求:查询指定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的模板引擎渲染动态页面。
-
首页
- 显示所有留言,采用分页技术进行展示。
- 提供留言编辑和提交功能。
-
留言编辑页
- 展示当前用户已发布的留言。
- 提供修改和删除留言的功能。
三.数据库设计
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
);
- 留言表 (
messages
):
-
id
: 这是一个整数类型的字段,用于唯一标识每一条留言记录。AUTO_INCREMENT
表示每次插入新记录时,该字段的值会自动增加,而不需要手动指定。PRIMARY KEY
定义该字段为主键,主键在一个表中必须唯一且不能为NULL。 -
content
: 这是一个文本类型字段,用于存储留言的具体内容。TEXT
类型适合存储大量的文本数据,远比VARCHAR
类型能存的字符数量多。NOT NULL
约束意味着这个字段在插入数据时必须有值,不能为空。 -
created_at
: 这是一个时间戳类型的字段,用于记录留言创建的时间。TIMESTAMP
类型可以精确到秒,并且DEFAULT CURRENT_TIMESTAMP
指定了当插入新记录时,如果这个字段没有给定值,就自动采用当前的时间戳作为其值。
配置MySQL数据库连接信息
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操作。
四.页面设计
五.关键技术
- 路由定义: 使用Flask的
@app.route()
装饰器定义URL路由,处理GET和POST请求。 - 模板渲染: 利用Jinja2模板引擎动态生成HTML页面,传递变量和执行逻辑控制。
- 数据库操作: 通过SQLAlchemy ORM进行数据库的增删改查操作,包括模型定义、会话管理和事务处理。
- 表单处理: Flask-WTF用于创建表单类,定义字段、验证规则,以及处理用户提交的数据。
- 分页功能: 实现分页查询,通常结合SQLAlchemy的Limit和Offset方法,以及前端的分页导航UI。
- 安全措施: 对用户输入进行校验和清理,防止SQL注入和XSS攻击;使用WTForms进行表单验证,确保数据的有效性。
- 错误处理: 实现基本的错误处理机制,比如404页面未找到、500服务器内部错误的定制化返回。