Flask_GET请求与JSON响应实战详解
2026/5/30 1:16:11 网站建设 项目流程

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

环境:Python 3.x + Flask
核心目标:理解 Flask 路由、GET 参数获取与jsonify响应的完整流程


一、背景

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

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

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

二、完整代码

fromflaskimportFlask,request,jsonifyfrommainimportaudio_to_data#main项目py程序,给main做个flask接口app=Flask(__name__)@app.route('/api/video_to_txt')defvideo_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()returnjsonify(processed_result)if__name__=='__main__':app.run(host="0.0.0.0",debug=True,port=5000)

三、逐模块解析

3.1 创建 Flask 应用

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

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


3.2 路由注册@app.route

@app.route('/api/video_to_txt')defvideo_to_txt():...

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

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

3.3 获取 GET 参数

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 调用业务模块

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 响应

returnjsonify(processed_result)

jsonify会自动:

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

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

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

3.6 启动服务

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

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

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

curl"http://localhost:5000/api/video_to_txt?path=..."|python-mjson.tool

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


方式三:Python requests 库

importrequests 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 程序内集成调用,可方便地处理返回结果进行二次开发。


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

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

@app.route('/api/video_to_txt')defvideo_to_txt():VIDEO_FILE_PATH=request.args.get('path')ifnotVIDEO_FILE_PATH:returnjsonify({"error":"缺少参数: path"}),400importosifnotos.path.exists(VIDEO_FILE_PATH):returnjsonify({"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()returnjsonify(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 接口服务。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询