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

news2024/11/13 8:57:17

使用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数据库连接信息

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.coloradmin.cn/o/1807557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RapidMiner数据挖掘4 —— 决策树

0. 序章 0.1 文本说明 所有应用程序操作的名称和编程说明都以黄色背景书写&#xff0c;问题以蓝色背景书写&#xff0c;以方便他们在文本中识别。 在整个课程中&#xff0c;请逐步遵循所有说明&#xff0c;并确保获得预期结果&#xff0c;然后再继续下一部分或问题。 通过在Ub…

文刻ai工具跟绘唐AI工具有什么区别

文刻AI工具和绘唐AI工具是两种不同的人工智能工具。点击查看 文刻AI工具是一种自然语言处理工具&#xff0c;可以用于生成、修改和校对文本。它可以帮助用户更高效地写作&#xff0c;提供词汇和语法建议&#xff0c;检查拼写和语法错误&#xff0c;并提供自动补全和自动纠正功…

网络安全难学吗?2024该怎么系统学习网络安全?

学习网络安全需要循序渐进&#xff0c;由浅入深。很多人对网络安全进行了解以后&#xff0c;就打算开始学习网络安全&#xff0c;但是又不知道怎么去系统的学习。 网络安全本身的知识不难&#xff0c;但需要学习的内容有很多&#xff0c;其中包括Linux、数据库、渗透测试、等保…

ue5肉鸽游戏视频教程学习记录

先在虚幻商城下载免费的paperzd插件&#xff0c;并启用。 导入资源后&#xff0c;先通过应用paper2d纹理资源&#xff0c;将去掉导入ue时产生的边缘模糊&#xff0c;再点击下面的创建瓦片集&#xff0c; 打开瓦片集&#xff0c;发现选中不对&#xff0c; 改变瓦片大小为16*…

64. UE5 RPG 创建新的双手攻击怪物

在上一篇文章中&#xff0c;我们实现了新的功能&#xff0c;现在可以创建多个普通攻击动画&#xff0c;并且可以根据你所使用的普通攻击动画&#xff0c;设置不同的攻击位置。比如&#xff0c;你使用武器&#xff0c;那么攻击位置需要从武器上获取&#xff0c;如果你没有持有武…

保存图片奇怪的bug

今天发现一个奇怪的bug 这个的dpi是100de ,但是我取完切片之后&#xff0c;发现这个结果就变了

温度传感器十大品牌

温度传感器品牌排行榜-十大热电偶品牌-热敏电阻品牌排行-Maigoo品牌榜

西门子学习笔记11 - PTO脉冲指令的使用

1、使用指令前的设置 1、打开一个脉冲发生器&#xff0c;并启用 2、选择使用PTO(脉冲A和方向B) 3、硬件设置输出 4、这样前期的准备工作就完成了 2、指令的使用 1、添加指令CTRL_PTO 2、配置如下 3、方向控制程序如下 4、最后进行测试即可

专业的数字雕刻和绘图软件Pixologic ZBrush 2024.0.4

Pixology ZBrush是一款专业的数字雕刻和绘图软件,适用于Windows、Linux和Mac OS。 皮克斯学ZBrush允许您使用可定制的画笔实时塑造、纹理和绘制虚拟粘土,从而提供即时反馈。当您使用皮克斯学ZBrush时,您可以访问世界各地艺术家使用的相同工具。 下面是一些特点和好处的像素…

【设计模式】结构型设计模式之 从IO流设计思想来看装饰器模式

介绍 装饰器模式也称为包装模式(Wrapper Pattern) 是指在不改变原有对象的基础之上&#xff0c;将功能附加到对象上&#xff0c;提供了比继承更有弹性的替代方案(扩展原有对象的功能)&#xff0c;属于结构型模式。 装饰器模式的核心是功能扩展&#xff0c;使用装饰器模式可以透…

Java | Leetcode Java题解之第142题环形链表II

题目&#xff1a; 题解&#xff1a; public class Solution {public ListNode detectCycle(ListNode head) {if (head null) {return null;}ListNode slow head, fast head;while (fast ! null) {slow slow.next;if (fast.next ! null) {fast fast.next.next;} else {ret…

Qt qtpropertybrowser使用实例(1)

属性界面实例&#xff1a; 代码如下&#xff1a; #include <QDate> #include <QLocale> #include "qtpropertymanager.h" #include "qtvariantproperty.h" #include "qttreepropertybrowser.h" int main(int argc, char *argv[]) {…

LLM大语言模型(十六):最新开源 GLM4-9B 本地部署,带不动,根本带不动

目录 前言 本机环境 GLM4代码库下载 模型文件下载&#xff1a;文件很大 修改为从本地模型文件启动 启动模型cli对话demo 慢&#xff0c;巨慢&#xff0c;一个字一个字的蹦 GPU资源使用情况 GLM3资源使用情况对比 前言 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 …

VUE + nodejs实战

BVDN搭建 D: cd nodejs ::npm install bootstrap ::npm install jquery ::npm install popper.js ::npm install vue npm install vue-router pauseapp.html <!DOCTYPE html> <!DOCTYPE html> <html> <head><!--bootstrap--><link rel"…

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation 引言 本文前作 VDM 已经推导出了扩散模型可以将优化 ELBO 作为目标函数。然而现在 FID &#xff08;也就是感知质量&#xff09;最好的模型还是用的其他目标函数&#xff08;如 DDPM 的噪声预…

Mysql使用中的性能优化——索引数对插入操作性能的影响

表的索引可以给数据检索提升效率&#xff0c;但是也给表的增删改操作带来代价。本文我们将关注&#xff0c;索引数量对INSERT操作的影响。 结论 索引数的新增会造成INSERT操作效率下降&#xff0c;约每增一个索引会降低10%效率。 实验数据 可以看到0个索引的效率是7个索引效…

【Linux】 安装rz 和sz

在 Linux 系统中&#xff0c;rz 和 sz 是两个用于在本地计算机与远程计算机之间安全传输文件的命令行工具。它们是 lrzsz 包的一部分&#xff0c;通常用于通过 SSH 连接传输文件。 打开终端&#xff1a; 首先&#xff0c;打开你的 CentOS 机器上的终端。 执行sz 提示下面信息…

【数据结构(邓俊辉)学习笔记】图05——优先级搜索

文章目录 0. 概述1. BAG2. ADT 0. 概述 学习下优先级搜索 1. BAG 优先级搜索是非常广义的&#xff0c;概况来说&#xff0c;无论DFS 还是BFS从逻辑上来都属于这种搜索。 回忆下什么叫搜索或者遍历&#xff0c;对于像图这种数据结构里的元素逐一的没有重复的也没有遗漏的对它们…

开发uniapp 小程序时遇到的问题

1、【微信开发者工具报错】routeDone with a webviewId XXX that is not the current page 解决方案: 在app.json 中添加 “lazyCodeLoading”: “requiredComponents” uniapp的话加到manifest.json下的mp-weixin 外部链接文章&#xff1a;解决方案文章1 解决方案文章2 &qu…

vs2019 c++20规范 全局函数 ref 及模板类 reference_wrapper<_Ty> 的源码分析

这是个引用&#xff0c;可以包裹一个对象&#xff0c;相当于引用该对象&#xff0c;而不是在作为函数形参时产生值传递。因为模板 reference_wrapper<_Ty> 其实是封装了该对象的地址。下面以图示形式给出其重要的成员函数。模板其实都差不多&#xff0c;跟人也一样&#…