Flask/Werkzeug equivalence of web.py app.request()



我正在将一个应用程序从 web.py 移植到Flask,主要是因为 web.py 对Python 3的支持参差不齐,而且对 web.py 的兴趣似乎越来越小。

但是我在 Flask/Werkzeug 中找不到的是一种使用路由器在我的应用程序中调度内部请求的方法。该应用程序的结构使得将有很多应用程序内调用,web.py 我或多或少地按如下方式处理这些调用:

app = web.application(....)
def callUrl(url, method, env, data):
parserUrl = url lib.parse.urlparse(url)
if parsedUrl.scheme == '' and parsedUrl.netloc == '':
# local call
res = app.request(url, method=method, data=data, env=env)
...
else:
assert env == {}
res = requests.request(url, method=method, data=data)
....

我试图找到一种方法来对 Flask 做类似的事情,但显然我找错了地方。有人可以指出我正确的方向吗?

好的,回答我自己的问题。我选择的解决方案是通过用所有必需的WSGI变量(REQUEST_METHODPATH_INFO等(填充环境字典,基本上重新实现 web.py 的app.request,包括wsgi.input作为io.BytesIO()对象,将正确的数据馈送到WSGI应用程序中。

然后我创建了一个合适的 start_response(( 方法来保存标头,并调用

resultData = app.wsgi_app(environ, start_response)

flask 应用程序会经历推送请求和环境的所有动作并执行所有路由,我以resultData的形式获取返回的数据(并且带有任何错误的标头等已传递给我的start_response方法(。

最新更新