Flask_GET请求与JSON响应实战详解

Flask GET 请求与 JSON 响应实战详解

环境 :Python 3.x + Flask

核心目标 :理解 Flask 路由、GET 参数获取与 jsonify 响应的完整流程


一、背景

在构建 AI 推理服务、音视频处理接口或内部工具时,Flask 是 Python 生态中最轻量的 HTTP 框架之一。它无需复杂配置,几十行代码即可暴露一个可供外部调用的 REST 接口。

本文以一个视频转文字接口为例,完整讲解:

  • Flask 应用的创建与启动方式
  • GET 请求的路由注册与参数获取
  • 调用外部业务模块并返回 JSON 数据
  • 三种调用方式(浏览器 / curl / Python)

二、完整代码

python 复制代码
from flask import Flask, request, jsonify
from main import audio_to_data
#main项目py程序,给main做个flask接口

app = Flask(__name__)

@app.route('/api/video_to_txt')
def video_to_txt():
    APPID      = "47xxxxx33"
    SECRET_KEY = "362bxxxxxxxxxxx73bceb23"
    LLM_API_KEY = "sk-29bxxxxxxxxxxxxxf37cc48"  # 阿里云 LLM

    # 从 GET 参数中读取视频路径
    VIDEO_FILE_PATH = request.args.get('path')

    # 调用音频处理模块
    audio_processor  = audio_to_data(APPID, SECRET_KEY, VIDEO_FILE_PATH, LLM_API_KEY)
    processed_result = audio_processor.process_audio_file()

    return jsonify(processed_result)

if __name__ == '__main__':
    app.run(host="0.0.0.0", debug=True, port=5000)

三、逐模块解析

3.1 创建 Flask 应用

python 复制代码
from flask import Flask, request, jsonify

app = Flask(__name__)
参数 说明
Flask(__name__) 以当前模块名初始化应用,Flask 据此定位资源路径
request 全局请求对象,包含 GET/POST 参数、请求头等信息
jsonify 将 Python 字典/列表序列化为 JSON HTTP 响应

Fig.1 展示了完整请求生命周期:客户端发起 GET 请求 → Flask 路由匹配 → 视图函数 → 业务处理 → JSON 响应返回。


3.2 路由注册 @app.route

python 复制代码
@app.route('/api/video_to_txt')
def video_to_txt():
    ...

@app.route 是 Flask 的路由装饰器,将 URL 路径绑定到视图函数。

  • 默认只响应 GET 方法(methods=['GET'] 可省略)
  • 若需同时支持 POST,写 methods=['GET', 'POST']
  • URL 规则支持变量路由,如 /api/<int:id>

3.3 获取 GET 参数

python 复制代码
VIDEO_FILE_PATH = request.args.get('path')

request.args 是一个类似字典的对象,包含 URL 中 ?key=value 形式的查询参数。

写法 说明
request.args.get('path') path 参数,缺省返回 None
request.args.get('path', '/default/path') 提供默认值
request.args['path'] 强制取值,参数不存在时抛 KeyError

完整请求 URL 示例:

复制代码
http://localhost:5000/api/video_to_txt?path=E:\workproject\bsd\video\test.mp4

3.4 调用业务模块

python 复制代码
audio_processor  = audio_to_data(APPID, SECRET_KEY, VIDEO_FILE_PATH, LLM_API_KEY)
processed_result = audio_processor.process_audio_file()

视图函数仅负责"接收参数 → 调用业务 → 返回结果 ",复杂逻辑封装在 main.pyaudio_to_data 类中,保持路由层的整洁。

最佳实践:路由函数尽量只做参数校验与结果打包,业务逻辑放到独立模块。


3.5 返回 JSON 响应

python 复制代码
return jsonify(processed_result)

jsonify 会自动:

  • 将 Python 对象序列化为 JSON 字符串
  • 设置响应头 Content-Type: application/json

若处理结果为字典,则响应体格式如:

json 复制代码
{
  "text": "今天天气很好,欢迎来到人工智能课堂...",
  "duration": 120.5
}

3.6 启动服务

python 复制代码
app.run(host="0.0.0.0", debug=True, port=5000)
参数 说明
host="0.0.0.0" 监听所有网卡,局域网内其他机器可访问
port=5000 监听端口,默认 5000
debug=True 开启调试模式:代码修改后自动重载,报错时显示详情

注意 :生产环境不要开启 debug=True,应使用 Gunicorn / uWSGI 托管。


四、三种调用方式

Fig.2 展示了三种调用方式(浏览器 / curl / Python requests)统一指向 Flask 服务端,均可获得 JSON 响应。

方式一:浏览器直接访问

直接在地址栏输入:

复制代码
http://localhost:5000/api/video_to_txt?path=E:\workproject\bsd\video\test.mp4

浏览器会以 JSON 格式显示响应结果,适合快速验证接口是否正常。


方式二:命令行 curl

bash 复制代码
curl "http://localhost:5000/api/video_to_txt?path=E:\workproject\bsd\video\test.mp4"

curl 返回的 JSON 可通过管道传给 jq 格式化:

bash 复制代码
curl "http://localhost:5000/api/video_to_txt?path=..." | python -m json.tool

适合在自动化脚本或 CI/CD 中批量调用。


方式三:Python requests 库

python 复制代码
import requests

url    = "http://localhost:5000/api/video_to_txt"
params = {"path": r"E:\workproject\bsd\video\test.mp4"}

response = requests.get(url, params=params)
data     = response.json()
print(data)

适合在 Python 程序内集成调用,可方便地处理返回结果进行二次开发。


五、参数校验(推荐添加)

原代码未对参数做校验,生产中建议加上:

python 复制代码
@app.route('/api/video_to_txt')
def video_to_txt():
    VIDEO_FILE_PATH = request.args.get('path')

    if not VIDEO_FILE_PATH:
        return jsonify({"error": "缺少参数: path"}), 400

    import os
    if not os.path.exists(VIDEO_FILE_PATH):
        return jsonify({"error": f"文件不存在: {VIDEO_FILE_PATH}"}), 404

    # 继续处理...
    audio_processor  = audio_to_data(APPID, SECRET_KEY, VIDEO_FILE_PATH, LLM_API_KEY)
    processed_result = audio_processor.process_audio_file()
    return jsonify(processed_result)
状态码 含义
200 成功(默认)
400 参数错误
404 资源不存在
500 服务端异常

六、完整流程总结

复制代码
客户端(浏览器 / curl / requests)
    ↓  GET /api/video_to_txt?path=xxx
Flask 路由匹配 @app.route('/api/video_to_txt')
    ↓
视图函数 video_to_txt()
    ↓  request.args.get('path')  读取参数
    ↓  audio_to_data(...)        调用业务模块
    ↓  process_audio_file()      执行处理
    ↓  jsonify(result)           打包响应
返回 JSON → { "text": "...", ... }

七、相关知识点延伸

主题 关键词
POST 请求体解析 request.json / request.form
文件上传处理 request.files
跨域支持 flask-cors
接口鉴权 flask-jwt-extended
生产部署 Gunicorn + Nginx

总结 :Flask 的核心设计哲学是"微框架"------只提供路由、请求、响应三件套,其余按需引入。掌握 @app.routerequest.argsjsonify 三个核心 API,即可快速构建稳定的 HTTP 接口服务。

相关推荐
量化吞吐机7 小时前
近期量化工具怎么选,先看规则流程能否承接
人工智能·python
一世繁华行7 小时前
Python帧对象
python
三川6988 小时前
Tkinter库的学习记录08- 容器控件
python
c_lb72888 小时前
近期AI量化工具选择,学习开发执行要分开
人工智能·python
天天进步20158 小时前
Python全栈项目--校园食堂点餐与推荐系统
开发语言·python
Ulyanov8 小时前
雷达导引头体制演进、技术特点与数学模型
python·雷达电子对抗·导引头
eybk8 小时前
写一个可以编制pdf文件的python程序
开发语言·python·pdf
卷无止境8 小时前
从Python的cryptography库出发,从零开始理解密码学,到构建零信任网络
后端·python
YFJ_mily9 小时前
**Python 实战:写一个论文 PDF 投稿自检工具|附 IPAT 2026 智能光子学会议征稿信息
人工智能·python·pdf·量子计算·论文投稿·智能光子学
三川6989 小时前
Tkinter库的学习记录05-文本框Entry
python