Flask/FASTAPI中Webhook接收数据传递至首页渲染的问题咨询
解决方案
方案1:应用全局变量(单进程部署场景适用)
小型单实例部署场景下可以直接使用Flask自带的应用配置存储跨路由共享数据,修改代码如下:
# webhook接口新增存储逻辑 @app.route('/webhook', methods = ['POST']) def webhook(): data = json.loads(request.data) item_name = data.get('item') if item_name: price_of_item = get_item_price(df, item_name) # 将价格写入应用全局配置 app.config['CURRENT_ITEM_PRICE'] = price_of_item return data
# 首页路由修改为读取全局配置 @app.route("/") def index(): price = app.config.get('CURRENT_ITEM_PRICE', '暂无查询结果') return index_template.format(message = price) index_template = """ <div> the price of apple is: {message} </div> """
注意:该方案仅适用于单worker单进程部署的场景,多进程部署时不同进程的全局变量相互独立,会出现取值不一致的问题。
方案2:内存缓存(多进程/多实例部署适用)
使用Flask-Caching组件做统一缓存存储,支持跨进程读写,扩展能力更强:
- 安装依赖:
pip install flask-caching
- 初始化缓存:
from flask_caching import Cache # 配置为简单内存缓存,如需多机器部署可直接替换为Redis缓存 app.config['CACHE_TYPE'] = 'SimpleCache' cache = Cache(app)
- webhook接口写入缓存:
@app.route('/webhook', methods = ['POST']) def webhook(): data = json.loads(request.data) item_name = data.get('item') if item_name: price_of_item = get_item_price(df, item_name) # timeout=0代表永久有效,可根据需求调整缓存过期时间 cache.set('current_item_price', price_of_item, timeout=0) return data
- 首页路由读取缓存:
@app.route("/") def index(): price = cache.get('current_item_price') or '暂无查询结果' return index_template.format(message = price)
如果需要同时存储多个商品的价格,可以将存储结构替换为字典类型,以商品名称为键存储对应价格即可。
内容的提问来源于stack exchange,提问作者SamAct
相关产品推荐
相关产品推荐

