web.py app.request()的Flask / Werkzeug等效项

时间:2018-10-15 17:54:07

标签: python flask werkzeug

我要将应用程序从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类似的方法,但是显然我在错误的地方寻找。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

好,回答我自己的问题。我选择的解决方案是,通过用所有必需的WSGI变量(app.requestREQUEST_METHOD等)填充环境字典来从web.py重新实现PATH_INFO,其中包括{{1 }}作为wsgi.input对象,将正确的数据输入到WSGI应用程序中。

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

io.BytesIO()

flask应用程序经历了推送请求和环境的所有动作并进行了所有路由,并且我将返回的数据返回到resultData = app.wsgi_app(environ, start_response)中(并且带有任何错误的标头已经传递给了我的{ {1}}方法。