【发布时间】:2019-11-24 11:43:56
【问题描述】:
在 Flask 中是否允许在视图函数之前修改请求 json 数据(例如在装饰器中)?甚至可能吗?想象这样的事情:
from functools import wraps
from flask import request, current_app
def my_function_decorator(func):
@wraps(func)
def decorated_function(*args, **kwargs):
req = request.get_json()
# do something to calculate the new value
req["new key"] = "new value"
request.set_json(req)
return func(*args, **kwargs)
return decorated_function
目的是根据发送到我的服务的地址数据,对来自第三方服务的经纬度数据进行地理编码。不确定装饰器是否是正确的选择,或者它是否是 before_request,或者其他什么,或者什么都没有。
【问题讨论】:
-
为什么需要操作 JSON?您可以将额外信息作为函数的另一个参数传递。或者在
g共享状态对象上设置信息。 -
但是,如果您愿意,请自暴自弃。然而,操作 Werkzeug 请求正文并非易事。你可能会更好地学习Werkzeug middleware components,然后构建你自己的中间件来做你的事情。见github.com/pallets/werkzeug/tree/0.15.x/src/werkzeug/middleware