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

使用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.mzph.cn/diannao/26368.shtml

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

相关文章

群体优化算法----狗群优化算法(注意没写错并不是狼群优化算法是狗群)介绍以及多峰函数最优解求解

介绍 狗群优化算法&#xff08;Dog Group Optimization, DGO&#xff09;是一种新兴的群体智能优化算法&#xff0c;其灵感来自于狗群的社会行为和协作方式。DGO算法利用了狗群在搜寻、合作、信息共享等方面的行为特征&#xff0c;以求解复杂的优化问题 主要概念 狗群行为&a…

云手机游戏托管的实现机制

云手机游戏托管的实现首先依赖于强大的云计算基础设施。 数据中心承载着海量的计算资源&#xff0c;通过虚拟化技术构建出一个个独立的云手机环境&#xff0c;为二游的运行提供了坚实的支撑。这些云手机具备与实体手机相当的性能&#xff0c;能够流畅地运行各类二次元游戏。 在…

仪表板展示|DataEase看中国:2024年高考数据前瞻

背景介绍 2024年高考即将来临。根据教育部公布的数据&#xff0c;2024年全国高考报名人数为1342万人&#xff0c;相比2023年增加了51万人。高考报名人数的增加&#xff0c;既体现了我国基础教育的普及范围之广&#xff0c;也反映了社会对高等教育的重视和需求。 随着中央和各…

“JS加密在线”:简单直接的在线JS加密网站

网站名&#xff1a;“JS加密在线”&#xff0c; 功能&#xff1a;JavaScript源代码加密。 UI&#xff1a; http://jsjiami.online/ 非常简洁的JS加密网站&#xff0c;几乎只有两个功能&#xff1a;上传JS文件、下载加密后的JS文件。 JS加密&#xff0c;就应该这样简单直接。…

使用随机数字或计数器在运行时计算百分比

如果我们需要在运行时计算某些项目的百分比&#xff0c;可以使用 Python 中的随机数生成器或者计数器来模拟这个过程。这取决于我们想要模拟的具体情况和场景。今天我将通过文字方式详细记录我实操过程。 1、问题背景 在处理大量交易时&#xff0c;我们需要对一定比例的交易进…

从源码分析 vllm + Ray 的分布式推理流程

一、前言 随着 LLM 模型越来越大&#xff0c;单 GPU 已经无法加载一个模型。以 Qwen-14B-Chat 模型为例&#xff0c;模型权重大概 28GB&#xff0c;但是单个 NVIDIA A10 仅有 24GB 显存。如果想要在 A10 上部署 Qwen-14B-Chat 模型&#xff0c;我们需要将模型切分后部署到 2 个…

Golang免杀-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…

【Three.js】知识梳理十五:相机控制器Controls

在 3D 场景中&#xff0c;摄像机的控制尤为重要&#xff0c;因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器&#xff0c;最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…

LabVIEW进行负载测试

本文介绍了如何使用LabVIEW进行负载测试&#xff0c;通过一个具体案例详细讲解了测试系统的组成、工作原理和实现方法。系统采用先进的硬件和软件架构&#xff0c;结合LabVIEW的强大功能&#xff0c;成功实现了对设备的高效负载测试&#xff0c;确保了系统的可靠性和性能。 项…

车载网络安全指南 概述(一)

返回总目录->返回总目录<- 目录 前言 参考文档 术语 前言 汽车电子系统网络安全指南给出汽车电子系统网络安全活动框架,以及在此框架下的汽车电子系统网络安全活动、组织管理和支持保障等方面的建议。 汽车电子系统网络安全指南适用于指导整车厂、零部件供应商、软…

借助ServiceDesk Plus,更接近ISO 27001变更管理标准

如果实施不当&#xff0c;变更支持可能会中断业务流程并导致停机。许多组织尚未建立不同的阶段来记录整个变更过程。这通常会导致 IT 环境&#xff0c;在这种环境中&#xff0c;实施变更的成功依赖于单个主题专家。这并不高效&#xff0c;并且对 IT 团队来说可能难以管理和压力…

航天科技集团与SPACEX公司的思考与分析

近期&#xff0c;中国航天科技集团正式发文与SPACEX对标的认识结果&#xff0c;包括发展理念上、科研生产模式上、关键核心技术上、质量效率效益上存在明显差距与不足。真诚的态度&#xff0c;赢得了社会上的广泛关注和积极评价。真心为老东家能够保持这份清醒而高兴。 从对标管…

安装台式电脑网卡驱动

安装电脑网卡驱动 1. 概述2. 具体方法2.1 先确定主板型号2.2 详细操作步骤如下2.2.1 方法一2.2.2 方法二2.2 主流主板官网地址 结束语 1. 概述 遇到重装系统后、或者遇到网卡驱动出现问题没有网络时&#xff0c;当不知道怎么办时&#xff0c;以下的方法&#xff0c;可以作为一…

Unity 设置默认字体(支持老版及新版TMP)

普通UI-Text设置 &#xff08;同一unity版本设置一次即可&#xff09; 1.首先工程的Resources目录下创建Fonts文件夹用于存放字体 如下图所示 2.找到Unity的安装目录下的Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.ugui\Runtime\UI\Core\Text.cs文件 …

常见报错及程序框架图

程序框架图 程序流程图又称程序框图&#xff0c;是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上&#xff0c;通过对输入输出数据和处理过程的详细分析&#xff0c;将计算机的主要运行步骤和内容标识出来。程序框图是进行程序设…

【安装笔记-20240612-Linux-内网穿透服务之cpolar极点云】

安装笔记-系列文章目录 安装笔记-20240612-Linux-内网穿透服务之 cpolar 极点云 文章目录 安装笔记-系列文章目录安装笔记-20240612-Linux-内网穿透服务之 cpolar 极点云 前言一、软件介绍名称&#xff1a;cpolar极点云主页官方介绍 二、安装步骤测试版本&#xff1a;openwrt-…

java多线程临界区介绍

在Java多线程编程中&#xff0c;"临界区"是指一段必须互斥执行的代码区域。当多个线程访问共享资源时&#xff0c;为了防止数据不一致或逻辑错误&#xff0c;需要确保同一时刻只有一个线程可以进入临界区。Java提供了多种机制来实现这一点&#xff0c;例如synchroniz…

理解 GPIO 的推挽与开漏

在日常的嵌入式开发过程当中&#xff0c;GPIO可以说是接触最多的外设了。小到点亮一个LED灯&#xff0c;大到模拟总线通讯&#xff0c;都必不可少地需要用到GPIO资源。而对于GPIO的两大输出模式 ——推挽输出和开漏输出&#xff0c;你是否真正理解了呢&#xff1f; 首先我们看…

CPI降温仍猛砍降息预期!美联储继续按兵不动,预计今年仅降息一次

要点&#xff1a; 美联储继续保持利率不变&#xff0c;符合市场预期。 决议声明不再说降通胀缺乏进一步进展&#xff0c;改称取得适度的进... 要点&#xff1a; 美联储继续保持利率不变&#xff0c;符合市场预期。 决议声明不再说降通胀缺乏进一步进展&#xff0c;改称取得适度…

【中间件】Pulsar集群安装

目录 一、Pulsar介绍 1.1 Pulsar基本介绍 1.2 Pulsar架构 Producer & Consumer Apache Zookeeper Pulsar Brokers Apache Bookkeeper 二、Zookeeper集群安装 三、Pulsar集群安装 3.1 bookie与broker配置 3.1.1 修改bookie配置文件 3.1.2 修改broker配置文件 3…