【python| 框架】flask速通

发布时间:2026/8/12 20:10:11

【python| 框架】flask速通
一.介绍Flask 是一款基于 Python 开发的轻量级 Web 应用框架核心依赖 WerkzeugWSGI 工具集负责路由、请求响应处理和 Jinja2模板引擎负责页面渲染属于典型的「微框架Micro-Framework」。它的设计理念是「核心精简、按需扩展」框架本身只提供 Web 开发的基础能力复杂功能通过第三方扩展实现开发者可以自由选择技术栈灵活度极高。安装pip install flask简单示例from flask import Flask app Flask(__name__) app.route(/demo) def hello(): return Hello, Flask! if __name__ __main__: app.run(debugTrue)程序运行后得到网址。访问网址时这是因为仅仅访问了网址若要显示具体内容则需要在网址上加/demo本篇将从无耗时版耗时版来解析。二.无耗时版2.1获取请求数据2.1.1获取 URL 查询参数Query Stringage request.args.get(age) pwd request.args.get(pwd) print(age, pwd)2.1.2获取表单数据Form Dataxx request.form.get(xx) yy request.form.get(yy) print(xx,yy)2.1.3JSON 格式2.1.3.1获取 JSON 格式的请求数据print(request.json)request.json是一个属性它会自动解析请求体中的 JSON 数据并返回 Python 字典或列表等。要求请求的Content-Type必须是application/json否则会返回None。2.1.3.2 返回 JSON 响应return jsonify({status:Ture,data:sucessful})jsonify() 是 Flask 提供的一个函数它会把传入的字典转换成 JSON 字符串并自动设置响应头的 Content-Type 为 application/json。浏览器浏览器里只能直接发起 GET 请求默认是模拟不出来post请求所以需要用到postmanpostman下载官网https://www.postman.com/downloads/根据需求自己进行测试 URL 参数测试表单提交测试 JSON 数据等一系列操作。2.2直接访问api并返回数据接收一个字符串 拼接密钥 MD5 签名并立即返回签名的完整接口逻辑。import hashlib from flask import Flask, request, jsonify app Flask(__name__) app.route(/bili, methods[POST]) def bili(): ordered_string request.json.get(ordered_string) if not ordered_string: return jsonify({status: False, error: 参数错误}) # 拼接密钥生成MD5签名 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(host127.0.0.1, port5000)对于该代码来说postman测试时请求方法POSTURLhttp://127.0.0.1:5000/biliBody 选择raw→JSON发送可得到回复2.3 文件版本授权2.3.1 读取白名单DB_FILE db.txt def get_user_dict(): info_dict {} try: with open(DB_FILE, r, encodingutf-8) as f: for line in f: line line.strip() if not line: continue parts line.split(\t) if len(parts) 2: token parts[0] username parts[1] info_dict[token] username except FileNotFoundError: pass return info_dict2.3.2 在接口中校验 tokenapp.route(/bo, methods[POST]) def bo(): token request.args.get(token) if not token: return jsonify({status: False, error: 认证失败缺少token参数}), 401 # 加载白名单 user_dict get_user_dict() if token not in user_dict: return jsonify({status: False, error: 认证失败token无效}), 401 # ... 后续业务逻辑如签名计算文件授权db.txt的作用详解 核心用途接口身份鉴权登录校验 这个 db.txt 是白名单凭证库用来控制谁能调用你的 MD5 加密接口 只有文件里登记过的 token才能成功请求接口 没登记的 token、乱填的 token直接返回 401 认证失败拒绝访问 每个 token 绑定一个用户名方便区分是谁在调用接口。2.4 数据库版本2.4.1 跨域from flask_cors import CORS CORS(app)前端页面如 http://localhost:8080调用后端 http://127.0.0.1:5000浏览器同源策略拦截请求报跨域错误。 flask-cors 专门解决该问题。2.4.2 数据库配置DB_CONFIG { host: 127.0.0.1, port: 3306, user: root, password: 密码, database: 数据库名, charset: utf8mb4 }2.4.3 数据库查询def fetch_one(sql, paramsNone): conn None cursor None try: conn pymysql.connect(**DB_CONFIG) cursor conn.cursor() cursor.execute(sql, params or ()) return cursor.fetchone() except MySQLError as e: app.logger.error(f数据库异常: {str(e)}) return None finally: if cursor: cursor.close() if conn: conn.close()每次调用都创建新连接执行完立即关闭。2.4.4 接口核心逻辑app.route(/boo, methods[POST]) def boo(): try: token request.args.get(token) if not token: return jsonify({status: False, error: 认证失败缺少token参数}), 401 # 数据库校验 token同时取出用户名 user_row fetch_one(SELECT token, name FROM flask WHERE token%s, (token,)) if not user_row: return jsonify({status: False, error: 认证失败token无效}), 401 username user_row[1] # JSON 格式校验、参数校验 ... # MD5 签名计算 ... # 返回结果 except Exception as e: return jsonify({status: False, error: 服务器内部错误}), 500从 URL 参数获取 token数据库白名单验证SELECT token, name FROM flask WHERE token%s获取用户名后附在响应中方便识别调用者2.5 数据库连接池2.5.1 创建全局连接池from dbutils.pooled_db import PooledDB import pymysql POOL PooledDB( creatorpymysql, maxconnections10, # 连接池最大连接数 mincached2, # 启动时预建的最小空闲连接 maxcached6, # 最大空闲连接数0无限制 blockingTrue, # 连接数满时是否阻塞等待 maxusage1000, # 单个连接复用次数上限 ping1, # 取出连接时先 ping 保活 host127.0.0.1, port3306, userroot, password密码, database数据库名, charsetutf8mb4 )dbutils提供数据库连接池解决原生驱动每次请求新建 / 销毁连接的性能缺陷。2.5.2 使用连接import pymysql.cursors def fetch_one(sql, paramsNone): conn None cursor None try: conn POOL.connection() # 从池里取连接 cursor conn.cursor(pymysql.cursors.DictCursor) # 字典游标 cursor.execute(sql, params or ()) return cursor.fetchone() except Exception as e: app.logger.error(fDB error: {e}) return None finally: if cursor: cursor.close() if conn: conn.close() # 不是真关闭是把连接归还给池2.5.3 对比原生 pymysqlDBUtils 连接池每次请求新建连接频繁 TCP 握手并发卡顿连接复用减少开销高并发稳定异常易出现连接泄漏数据库连接数爆满自动归还、自动检测断线重连无连接上限控制流量大时数据库崩溃限制最大连接数保护 MySQL三.耗时版3.1 接受任务并加入队列app.route(/boo, methods[POST]) def boo(): # 1. 解析请求体为 JSON req_data request.get_json() # 2. 获取 ordered_string 参数默认空字符串 ordered_string req_data.get(ordered_string, ) # 3. 参数校验不能为空 if not ordered_string: return jsonify({status: False, error: 参数错误}), 400 # 4. 生成全局唯一任务 ID tid str(uuid.uuid4()) # 5. 创建 Redis 连接每次请求新建生产环境建议用连接池 redis_conn redis.Redis(**REDIS_CONFIG) # 6. 构造任务字典并序列化为 JSON 字符串 task_info json.dumps({ tid: tid, ordered_string: ordered_string }) # 7. 将任务推入 Redis 列表的左侧队头 redis_conn.lpush(task_queue, task_info) # 8. 立即返回任务 ID不等待实际处理 return jsonify({ status: True, data: { tid: tid, message: 任务已提交等待处理 } })UUID用于生成全局唯一标识符为什么是 lpush将新任务推入 List 的左侧头部而后台 Worker 使用 brpop 从右侧尾部弹出。效果先入队的任务在 List 更靠右的位置会被优先取出从而保证 FIFO先进先出 顺序。3.2 worker处理后台 Worker一个独立的守护线程启动时连接 Redis无限循环地从 task_queue 阻塞式弹出任务brpop执行模拟的耗时操作time.sleep(2)然后将结果推入 result_queue。初始化 Redis 连接并保持长连接这条连接在整个 Worker 生命周期内只创建一次并反复使用。Redis作用一个基于内存的“数据结构服务器”主要用来解决高并发下关系型数据库如 MySQL的读写瓶颈提升系统响应速度。def worker(): 后台工作线程从任务队列取任务处理后放入结果队列 try: redis_conn redis.Redis(**REDIS_CONFIG) logging.info(Worker 启动成功等待任务...) while True: # 1. 阻塞式从任务队列右侧弹出任务 task_data redis_conn.brpop(task_queue, timeout1) if task_data: queue_name, task_json task_data task json.loads(task_json) tid task.get(tid) ordered_string task.get(ordered_string) logging.info(fWorker 开始处理任务: {tid}) # 2. 模拟耗时处理 time.sleep(2) result f处理完成: {ordered_string} # 3. 将结果放入结果队列 result_data json.dumps({ tid: tid, result: result, status: completed }) redis_conn.lpush(result_queue, result_data) logging.info(fWorker 完成任务: {tid}) except Exception as e: logging.error(fWorker 异常: {e})为什么用 brpop 而不是 rpoprpop 是无阻塞的如果队列为空立即返回 None这样 Worker 就会在 while True 中高速空转白白消耗 CPU。brpop 在无任务时让线程进入休眠不占用 CPU有新任务时立即唤醒既高效又节省资源。Worker 与 Web 接口的协作全景客户端 → POST /boo带 ordered_stringWeb 线程 → 生成 tidlpush 到 task_queue立即返回 tidWorker 线程 → brpop 拿到任务执行耗时操作lpush 结果到 result_queue客户端 → 轮询 GET /result/tid遍历 result_queue 查找匹配的 tid获取结果四.附1.Redis下载Redis下载https://github.com/tporadowski/redis/releases2.状态码常见状态码状态码含义使用场景200OK 请求成功正常返回业务数据400Bad Request 参数非法缺少参数、参数格式错误401Unauthorized 未认证token 不存在、token 失效403Forbidden 权限不足登录成功但无操作权限404Not Found 接口不存在访问不存在的路由500Internal Server Error代码报错、数据库异常

相关新闻

VMware虚拟机去虚拟化实战:修改vmware-vmx.exe绕过硬件检测

VMware虚拟机去虚拟化实战:修改vmware-vmx.exe绕过硬件检测

2026/8/12 20:10:11

1. 项目概述:为什么要在VM16里折腾去虚拟化?如果你在虚拟机里跑过一些对硬件环境有特殊检测的软件,比如某些游戏、专业工具或者安全软件,大概率会遇到一个头疼的问题:它们能“感知”到自己运行在虚拟机里,然…

langchain1.X学习笔记-19-智能体高级用法之流式输出及模式

langchain1.X学习笔记-19-智能体高级用法之流式输出及模式

2026/8/12 20:10:11

文章目录 1 流式输出的说明 2 具体的输出模式 2.1 模型初始化 2.2 values输出模式 2.3 updates输出模式(默认) 2.4 messages输出模式 2.5 tasks输出模式 2.6 debug输出模式 2.7 checkpoints输出模式 2.8 custom输出模式 3 流式输出模式总结 3.1 输出模式对比 3.2 模式组合使用 …

Xshell、MobaXterm 之外的新选择:uniTerm 开源终端软件,不到 10MB,覆盖 20+ 协议

Xshell、MobaXterm 之外的新选择:uniTerm 开源终端软件,不到 10MB,覆盖 20+ 协议

2026/8/12 20:10:11

作为一个运维/开发人员,你的任务栏里通常躺着几个客户端? 我数了一下自己的:Xshell 连 SSH、Xftp 传文件、Navicat 查数据库、Redis Desktop Manager 看缓存、Windows 自带的 RDP 连远程桌面……如果再算上偶尔用的 S3 浏览器、VNC 客户端&a…

【大连交通大学主办 | 大连举办】2026年统计学与人工智能国际学术会议(ICSAI 2026)

【大连交通大学主办 | 大连举办】2026年统计学与人工智能国际学术会议(ICSAI 2026)

2026/8/12 22:10:16

2026年统计学与人工智能国际学术会议(ICSAI 2026) 2026 International Conference on Statistics and Artificial Intelligence 2026年统计学与人工智能国际学术会议(ICSAI 2026)将于2026年10月30日至11月1日在中国大连召开。本次会议旨在汇…

SAP采购订单审批状态查询:EKKO表字段解析与ABAP实现

SAP采购订单审批状态查询:EKKO表字段解析与ABAP实现

2026/8/12 22:10:16

1. 项目概述:从EKKO表获取采购订单审批状态在SAP ERP的日常运维和二次开发中,采购订单的审批状态查询是一个高频且核心的需求。无论是业务用户需要实时跟踪订单流程,还是开发人员需要为报表、接口或增强功能获取准确的审批数据,最…

ArduPilot仿真环境搭建全攻略:从WSL2配置到SITL编译排错

ArduPilot仿真环境搭建全攻略:从WSL2配置到SITL编译排错

2026/8/12 22:10:16

1. 从零到一:为什么ArduPilot仿真环境搭建如此“艰辛”? 如果你正在搜索“ArduPilot仿真环境搭建”,大概率已经看过了官方文档,或者尝试过网上流传的“一键脚本”。然后,你很可能卡在了某个步骤,比如编译报…

5分钟掌握B站CC字幕下载技巧:BiliBiliCCSubtitle终极使用指南

5分钟掌握B站CC字幕下载技巧:BiliBiliCCSubtitle终极使用指南

2026/8/12 22:10:16

5分钟掌握B站CC字幕下载技巧:BiliBiliCCSubtitle终极使用指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为B站视频的字幕提取而烦恼吗&#…

实战指南:如何用TripoSR在0.5秒内从单张图片生成高质量3D模型

实战指南:如何用TripoSR在0.5秒内从单张图片生成高质量3D模型

2026/8/12 22:10:16

实战指南:如何用TripoSR在0.5秒内从单张图片生成高质量3D模型 【免费下载链接】TripoSR TripoSR: Fast 3D Object Reconstruction from a Single Image 项目地址: https://gitcode.com/GitHub_Trending/tr/TripoSR 想要将普通的2D照片瞬间转化为惊艳的3D模型…

Rhino AI建模插件实测:基于MCP协议打通对话式指令与参数化工作流

Rhino AI建模插件实测:基于MCP协议打通对话式指令与参数化工作流

2026/8/12 22:00:16

1. 先搞清楚这个插件到底能做什么,以及它和普通插件有什么不同 如果你在找 Rhino 的 AI 辅助建模插件,特别是看到“实时建模”、“MCP”、“49个功能”、“参数化工作流”这些关键词,那这个插件最值得你关注的核心价值,其实不是功…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/12 7:11:29

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/11 8:44:43

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/11 15:57:54

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

告别模组冲突!5步掌握《神界:原罪2》模组管理的终极秘诀

告别模组冲突!5步掌握《神界:原罪2》模组管理的终极秘诀

2026/8/12 9:39:37

告别模组冲突!5步掌握《神界:原罪2》模组管理的终极秘诀 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager 你是否曾经为《…

如何用Charge Limiter延长MacBook电池寿命:终极保护指南

如何用Charge Limiter延长MacBook电池寿命:终极保护指南

2026/8/12 9:39:37

如何用Charge Limiter延长MacBook电池寿命:终极保护指南 【免费下载链接】charge-limiter macOS app to set battery charge limit for Intel MacBooks 项目地址: https://gitcode.com/gh_mirrors/ch/charge-limiter 还在为MacBook电池健康度下降而烦恼吗&am…

推三返一模式5.0版本系统开发

推三返一模式5.0版本系统开发

2026/8/12 9:39:37

推三返一模式5.0版本系统开发要点编辑:araolin(私域邦网络土土哥)模式核心逻辑 推三返一是一种促销或分销机制,用户推荐三人完成特定行为(如购买、注册),推荐人可获得返利或奖励。5.0版本通常在…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…