Flask 通过SQLAlchemy连接mySQL实现一个实用的用户管理功能

Flask 通过SQLAlchemy连接mySQL实现一个实用的用户管理功能

安装配置

首先确保已经安装如下程序:

  1. flask:用于构建web应用程序。
  2. flask-sqlalchemy:用于在 Flask 中连接 MySQL 数据库,通过pip install flask-sqlalchemy安装。
  3. pymysql:运行时可能会出现出现 ModuleNotFoundError: No module named ‘MySQLdb’ 错误,通常是由于缺少 MySQL Python 驱动程序导致的。这里我使用的是 PyMySQL 作为 MySQL 的连接器,通过pip install pymysql安装后,在连接数据库时将连接字符串中的 mysql 替换为 mysql+pymysql即可。
配置数据库连接信息,并创建 SQLAlchemy 用户对象

在配置文件模块config.py中,配置 数据库连接信息,并创建 SQLAlchemy 用户对象,这样就可以在其他地方直接引用:

# config.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()  # 创建全局的 SQLAlchemy 实例def create_app():app = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/db_name'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb.init_app(app)  # 在应用工厂函数中初始化 SQLAlchemy 实例return appclass User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(50), unique=True, nullable=False)nickname = db.Column(db.String(50), nullable=False)password = db.Column(db.String(50), nullable=False)

注意,在app.config[‘SQLALCHEMY_DATABASE_URI’] = 'mysql+pymysql://username:password@localhost/db_name’中要将对应的数据库用户名、密码、地址、表名换成自己数据的真实信息。

编写 routers.py 路由模块

在 routers.py 文件中,编写用户列表、新增用户、删除用户接口

# routers.py
from flask import Blueprint, render_template,request,redirect,url_for,jsonify
from config import db,User  # 导入应用工厂函数中初始化的 SQLAlchemy 实例bp = Blueprint('main', __name__)@bp.route('/')
def index():# 打开数据库连接db.create_all()# 查询所有用户users = User.query.all()# 关闭数据库连接db.session.close()return render_template('users.html',users=users)@bp.route('/add',methods=['GET'])
def add():return render_template('addUser.html')@bp.route('/add_user', methods=['POST'])
def add_user():# 打开数据库连接db.create_all()# 获取请求数据data = request.get_json()username = data.get('username')nickname = data.get('nickname')password = data.get('password')# 创建新用户new_user = User(username=username, nickname=nickname, password=password)print(new_user)db.session.add(new_user)db.session.commit()# 关闭数据库连接db.session.close()return 'User added successfully'# return redirect(url_for('main.index'))@bp.route('/del_user', methods=['POST'])
def del_user():# 打开数据库连接db.create_all()# 获取请求数据data = request.get_json()username = data.get('username')user = User.query.filter_by(username={username}).first()print(user)if user:# 删除用户db.session.delete(user)db.session.commit()# 关闭数据库连接db.session.close()return 'User added successfully'# return redirect(url_for('main.index')) 在else:return 'User not found'def init_routes(app):app.register_blueprint(bp)

这里我使用了 Blueprint 编写路由,便于后期项目管理,也可以不使用。注意,在 Blueprint 中要实现路由跳转,需要写return redirect(url_for('main.index')),如果写成return redirect(url_for('index'))将无法跳转。

用户列表 html 页面

用户列表页面:users.html代码如下

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户列表</title>
</head>
<body><h2>用户列表</h2><ul>{% for user in users %}<li>{{user.username}}-{{user.nickname}} <button onclick="delUser('{{user.username}}')">删除用户</button></li>{% endfor %}</ul><a href="http://localhost:5000/add">新增用户</a><script>function delUser(username) {fetch('/del_user', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ username: username })}).then(response => {console.log(response);if (response.ok) {// 请求成功,重定向到首页,从而刷新页面window.location.href = '/';} else {alert('删除用户失败');}})}</script></body>
</html>
新增用户 html 页面

新增用户页面:addUser.html代码如下

<html lang="en"><head><meta charset="UTF-8"><title>Login</title>
</head>
<body><form><h2>新增用户</h2><table><tr><td>Username</td><td><input type="text" name="username" id="username"></td></tr><tr><td>Nickname</td><td><input type="text" name="nickname" id="nickname"></td></tr><tr><td>Password</td><td><input type="password" name="password" id="password"></td></tr><tr><td><button onclick="addUser()">提交</button></td></tr><tr><td><a href="http://localhost:5000/">查看用户列表</a></td></tr></table></form><script>function addUser() {var username = document.getElementById('username').value;var nickname = document.getElementById('nickname').value;var password = document.getElementById('password').value;var data = {username: username,nickname: nickname,password: password};if (username && nickname && password) {fetch('/add_user', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(data)}).then(response => {if (response.ok) {alert('新增用户成功');// 请求成功,重定向到首页,从而刷新页面,视需求而定// window.location.href = '/';} else {alert('新增用户失败');}})} else {alert('请输入表单信息');}}</script>
</body>
</html>
编写 main.py 主程序

最后,在主程序 main.py 中,引入对应模块,并注入app中

# main.py
from config import create_app, db
from routes import init_routes# 调用应用工厂函数创建应用实例
app = create_app()init_routes(app)if __name__ == '__main__':app.run(debug=True)
运行,预览效果

运行 main.py 文件,可以看到

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9535.shtml

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

相关文章

Web安全:SQL注入漏洞详解,SQL注入常见功能、危害、分类、判断注入点、注入方式

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域的一百多个知识点,持续更新。 这一章节我们需要知道S…

FPGA+炬力ARM实现VR视频播放器方案,3D眼镜显示

3D眼镜显示&#xff1a; FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文…

24数维杯C题18页保姆级思路+代码+后续参考论文

18页保姆级思路&#xff1a; 24数维杯C题20页保姆级思路&#xff0b;可执行代码&#xff0b;参考论文 简单麦麦https://www.jdmm.cc/file/2710641/ 群&#xff1a;666165284 1&#xff09;确定天然气水合物资源分布范围 要确定天然气水合物资源的分布范围&#xff0c;需要分…

谷歌上架,白包号放着备用,啥也没干也被封?是什么情况?

众所周知&#xff0c;Google Play Store是全球最大的应用商店之一&#xff0c;每天都有大量的应用被上传和下架。 同时&#xff0c;随着谷歌上架行业的发展&#xff0c;谷歌现在的审核系统越来越智能和先进&#xff0c;开发者们尝试着各种方法来提高上架成功率。其中&#xff…

提升工作效率的秘密武器

&#x1f31f;工作小能手们&#xff0c;你们是否还在为日复一日的办公琐事感到头疼&#xff1f;别急&#xff0c;今天我就为大家种草几款鲜为人知但超级实用的工作软件&#xff0c;让你的工作效率飞起来&#xff01;&#x1f308; 1️⃣《亿可达》 &#x1f5a5;️ 它是一款自…

Windows系统本地部署DrawDB数据库设计工具并实现无公网IP远程访问

文章目录 1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 开发中很多时候都会使用到数据库&#xff0c;所以选择一个好用的数据库设计工具会让工作效率翻倍。在当今数字化时代&#xff0c;数据库管理是许多企业和个人项目的核心。设…

Day2:调节屏幕驱动

Day2调节屏幕驱动 原理图&#xff1a; 要想调节屏幕驱动

全球10KM土地利用程度数据

全球10KM土地利用程度数据 数据介绍 “一带一路”监测区域土地利用程度指数平均值为0.34&#xff0c;不同区域利用程度差异明显&#xff0c;但总体上高值区域与人口分布的稠密区域吻合。中南半岛、南亚、欧洲和小亚细亚半岛等地海拔较低&#xff0c;水热组合条件较好&#xff…

服务器直连电脑(盒子直连电脑)电脑需要设置为固定ip才能访问盒子

文章目录 现象盒子设置为固定ip&#xff0c;pc设置成固定ip&#xff08;以太网网卡&#xff0c;realtak那个&#xff0c;不是tap-windows那个&#xff0c;tap-windows不用管&#xff09;&#xff0c;在pc上用ip搜索工具搜索&#xff0c;可以搜到盒子ip。盒子设置为固定ip&#…

Metes and Bounds Pro for Mac 激活版:精准数据转换与绘图利器

Metes and Bounds Pro for Mac是一款专为土地测量和边界划定而设计的专业软件&#xff0c;为Mac用户提供了高效、精确的测量工具。其核心功能在于其全面的测量工具和简便的操作流程&#xff0c;能够满足在土地管理、房地产开发、农业规划等领域的多样化需求。 这款软件集合了距…

基于docker安装flink

文章目录 环境准备Flinkdocker-compose方式二进制部署 KafkaMysql Flink 执行 SQL命令进入SQL客户端CLI执行SQL查询表格模式变更日志模式Tableau模式窗口计算 窗口计算滚动窗口demo滑动窗口 踩坑 环境准备 Flink docker-compose方式 version: "3" services:jobman…

媲美Suno、Udio!AI铁了心,要砸音乐人的饭碗

5月10日凌晨&#xff0c;著名语音生成式AI平台ElevenLabs在社交平台宣布&#xff0c;推出文本生成歌曲产品ElevenLabs Music。 从其展示的效果来看&#xff0c;音乐的节奏感、和声、乐器的搭配、情感表达、创意性、风格的多样性、高/低音&#xff0c;可媲美该领域的两款头部产…

618精选好物推荐,五款品质与性价比并存的选择!

在繁忙的生活中&#xff0c;我们总是渴望找到那些能够提升生活品质的好物&#xff0c;让每一天都过得更加精彩。而618购物节&#xff0c;无疑是寻找这些好物的绝佳时机。在这个盛大的购物狂欢中&#xff0c;我们为大家精选了五款品质与性价比并存的选择&#xff0c;让大家在享受…

『大模型笔记』Google CEO Sundar Pichai(桑达尔·皮查伊)谈人工智能的未来!

Google CEO Sundar Pichai(桑达尔皮查伊)谈人工智能的未来! 文章目录 一. Google CEO谈人工智能的未来总结摘要观点时间线二. 参考文献中文字幕视频链接,欢迎关注我的xhs账号:Google CEO 皮查伊谈人工智能的未来! 一. Google CEO谈人工智能的未来

struct和union大小计算规则

Union 一&#xff1a;联合类型的定义 联合也是一种特殊的自定义类型&#xff0c;这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以联合也叫共用体&#xff09; 比如&#xff1a;共用了 i 这个较大的空间 二&#xff1a; 联合的…

AI怎么把图形分割下来

1 画一个图形 2 画一条直线分割 用直线段工具&#xff0c;画一条直线 3 分割操作 用 直接选择工具&#xff0c;先选中直线&#xff0c;按shift键&#xff0c;再选中矩形&#xff0c;把他两都选上 路径查找器&#xff0c;点分割(路径查找器面板如果没有&#xff0c;在窗口 菜单…

接口自动化框架篇:接口框架中的日志记录封装!

接口自动化框架中的日志记录是一个重要的环节&#xff0c;它能帮助我们追踪接口的执行情况、调试问题、分析测试结果等。通过规范的日志记录&#xff0c;我们可以更好地管理和维护接口自动化测试代码。 以下是一个从0到1的详细规范&#xff0c;来进行接口框架中的日志记录封装…

Java方法和数组

方法 Java中的方法就是c语言中的函数。 方法的定义 定义格式如下 修饰符 返回值 方法名([参数列表]){代码块[return 返回值;] } //方括号[]括起来代表可以没有&#xff0c;不是必须有的方法名采用小驼峰命名&#xff08;就是有多个单词&#xff0c;第一个单词首字母小写其…

酷柚易汛ERP源码部署/售后更新/搭建/上线维护

一款基于FastAdminThinkPHPLayui开发的ERP管理系统&#xff0c;帮助中小企业实现ERP管理规范化&#xff0c;此系统能为你解决五大方面的经营问题&#xff1a;1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机电…

Vue3自定义指令封装-按钮权限控制v-permission、hasPermissions

背景&#xff1a;平常所接触到的系统权限控制&#xff0c;大部分都是菜单、路由级别的控制&#xff0c;但后台管理系统中&#xff0c;很多操作都是与职责和角色挂钩的&#xff0c;同样一个列表&#xff0c;不同人的操作列并不都一样&#xff0c;有些页面存在一些含有重要数据的…