Flask如何将API获取处理后的数据传递到HTML并在/test路由渲染
解答
1. 实现/test路由渲染与数据传递
首先确保你的Flask项目根目录下存在templates文件夹,将x.html放入该文件夹,这是Flask默认读取模板文件的路径。
修改后的x.py代码
from flask import Flask, render_template import requests app = Flask(__name__) @app.route('/test', methods = ['GET']) def get_from_api(): url = "https://xxxx" API_KEY = "xxxx" params = { 'token' : API_KEY } response = requests.get(url, params).json() city = response['city'] state = response['region'] postal = response['postal'] country = response['country'] location = response['loc'] data = { "city" : city, "state" : state, "postal" : postal, "country" : country, "location" : location } # 渲染模板并传递处理好的数据 return render_template('x.html', **data)
修改后的x.html代码
使用Flask内置的Jinja2模板语法替换占位内容即可:
<div class = "element_val"> <li><div id = "city">{{ city }}</div></li> <li><div id = "state">{{ state }}</div></li> <li><div id = "postal">{{ postal }}</div></li> <li><div id = "country">{{ country }}</div></li> <li><div id = "location">{{ location }}</div></li> </div>
2. 路由中做数据预处理的合理性
- 预处理逻辑简单、代码量少的场景下,直接写在路由函数中是合理的:逻辑集中无需跳转,维护成本低。
- 如果预处理逻辑超过10行、涉及多个外部依赖、有复用需求,就不适合放在路由中,会导致路由函数臃肿,不符合单一职责原则。
3. 多预处理步骤的优化方案
- 拆分业务逻辑到独立模块:把API调用、字段提取、数据校验等逻辑抽成独立的工具函数,放在单独的
utils.py或者service.py文件中,路由只负责接收请求、调用工具函数、返回响应,保持路由代码清爽。 - 增加缓存机制:如果第三方API返回的数据实时性要求不高,可以用缓存存储预处理后的结果,避免每次请求都重复调用API和处理数据,大幅提升响应速度。
- 拆分校验逻辑:针对API返回数据的合法性校验、缺省值处理等逻辑单独封装,避免和业务处理逻辑耦合。
- 异步处理:如果预处理耗时很长,可使用异步任务队列处理耗时操作,避免阻塞请求。
内容的提问来源于stack exchange,提问作者apYan
相关产品推荐
相关产品推荐

