当前位置: 首页 > news >正文

Python Flask框架入门_4.通过token认证验证API的访问权限(集成数据库连接池版本)

由于链接数据库频繁操作导致性能损耗严重,需使用连接池机制进行数据库优化:

下载并引入dbunits模块实现数据库连接池配置:

(.venv) PS D:\PythonProject2> pip install dbutils
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting dbutilsDownloading https://pypi.tuna.tsinghua.edu.cn/packages/98/a7/4fe7da3082241028e62c390bf9357d60522dd03d9329e3a560045fe14dfd/dbutils-3.1.2-py3-none-any.whl (32 kB)
Installing collected packages: dbutils
Successfully installed dbutils-3.1.2[notice] A new release of pip is available: 25.1.1 -> 25.2
[notice] To update, run: python.exe -m pip install --upgrade pip
(.venv) PS D:\PythonProject2> 
from dbutils.pooled_db import PooledDB

创建连接池:

POOL = PooledDB(creator=pymysql, # 使用链接数据库的模块maxconnections=10, # 连接池允许的最大连接数,0和None表示不限制连接数mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建maxcached=5, # 链接池中最多闲置的链接,0和None不限制blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错setsession=[], # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]ping=0,host='127.0.0.1', port=3306, user='root', passwd='rootpassword', charset="utf8", db='day20'
)

连接池优化性能:

连接池配置最大10个连接,动态创建与回收闲置链接

阻塞模式等待连接释放,闲置链接超限自动清理

通过pull_connection从池中获取并归还数据库连接

完整代码如下:

import hashlib
import pymysql
from flask import Flask, request, jsonify
from dbutils.pooled_db import PooledDB
app = Flask(__name__)
# 创建连接池
POOL = PooledDB(creator=pymysql, # 使用链接数据库的模块maxconnections=10, # 连接池允许的最大连接数,0和None表示不限制连接数mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建maxcached=5, # 链接池中最多闲置的链接,0和None不限制blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错setsession=[], # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]ping=0,host='127.0.0.1', port=3306, user='root', passwd='rootpassword', charset="utf8", db='day20'
)
# 连接MySQL,执行SQL查询语句,返回结果
def fetch_one(sql,params):# conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='rootpassword', charset="utf8", db='day20')conn = POOL.connection()cursor = conn.cursor()# cursor.execute("select * from user where token=%s", [token, ])cursor.execute(sql, params)result = cursor.fetchone()cursor.close()conn.close()# 不是关闭连接,而是将连接交还到连接池中print("result", result)return result@app.route("/bili", methods=["POST"])
def bili():"""请求URL中携带/bili?token=...请求的数据格式要求:{ "ordered_string":"......" }:return:"""# 1.token是否为空token = request.args.get("token")print("token", token)if not token:return jsonify({"status":False , 'error':"认证失败"})# 从数据库表中读取授权码的情况# 连接MYSQL执行命令,验证token是否合法result = fetch_one("select * from user where token=%s", [token, ])if not result:return jsonify({"status": False, "error": "认证失败"})ordered_string = request.json.get("ordered_string")if not ordered_string:return jsonify({"status": False, "error": "参数错误"})# 调用核心算法,生成sign签名encrypt_string = ordered_string + "560c52ccd288fed045859ed18bffd973"obj = hashlib.md5(encrypt_string.encode('utf-8'))sign = obj.hexdigest()# 返回签名return jsonify({"status": True, "data": sign})if __name__ == '__main__':app.run(host="127.0.0.1",port=5000)

进行测试:

image

http://www.gsyq.cn/news/1856.html

相关文章:

  • 学生开发者经验|豆包大模型 + TRAE,让 AI 应用快速落地
  • Vllm部署大模型
  • 题解:P14013 [POCamp 2023] 送钱 / The Generous Traveler
  • 第十三届 TCCT 随机系统与控制专题研讨会 暨2025年智能控制与计算科学国际学术会议 (ICICCS 2025)
  • 注释
  • 2025 第九届控制工程与先进算法国际论坛(IWCEAA 2025)
  • 高等代数 I note
  • JAVA反编译神器CFR
  • 离散数学与结构 note
  • Java基础
  • 部分算法记录
  • Kubernetes资源管理方式
  • 2025公众号排版工具深度测评报告:10款主流产品功能对比与场景化选择指南
  • 即将举办2025年11月埃及汽配博览会埃及国际汽配展Autotech
  • JBT 10389-2014
  • 对于退款/拒付这类逆向订单操作需要创建新的单号么
  • 小白如何零成本搭建一个属于自己的私人知识库
  • MathType7下载安装2025最新下载+安装教程(附安装包)
  • 【完结10章】Java大模型工程能力必修课,LangChain4j 入门到实践
  • 基于 RBF 神经网络的 PID 参数自适应整定—风力机变桨距控制
  • 故障分析:11GR DATAGRUAD环境BROKER配置Fast-Start Failover
  • 传统
  • 2025-09-10
  • DARPA AI网络挑战赛技术框架全解析:自动化漏洞挖掘与修复系统构建
  • apche 2.4 开启mod_cache_disk和mod_deflate后,磁盘上缓存的是压缩后的文件
  • 复现tensor2tensor代码时遇到的问题和相关链接
  • 再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
  • 三.ubuntu22.04 使用C++部署PyTorch模型
  • alertmanager配置集群模式
  • AI 是否绑架了云原生创新?