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

立方体Cube 2024-07-12 10:05:04 阅读 69

使用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

首页分页显示留言 (<code>@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的模板引擎渲染动态页面。

首页

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

留言编辑页

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

三.数据库设计

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服务器内部错误的定制化返回。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。