python - web.py app.request() 的 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 做类似的事情,但显然我找错了地方。有人可以指出我正确的方向吗?
解决方案
好的,回答我自己的问题。我选择的解决方案基本上是从 web.py 重新实现,方法app.request
是用所有必需的 WSGI 变量(、、等)填充环境字典REQUEST_METHOD
,PATH_INFO
包括将正确数据提供给 WSGI 应用程序wsgi.input
的对象。io.BytesIO()
然后我创建了一个合适的 start_response() 方法来保存标题,并调用
resultData = app.wsgi_app(environ, start_response)
烧瓶应用程序经历了推送请求和环境的所有动作并执行所有路由,然后我将返回的数据取回resultData
(并且带有任何错误的标头等已传递给我的start_response
方法)。
推荐阅读
- amazon-web-services - dyanmodb 时间点保存在哪里?
- sas - 如何将 SAS worddate 格式转换为数字日期
- javascript - 如何使用 addEventListener 进行输入验证?
- c# - 有没有办法从 Windows 10 上的 Google Chrome 吐司通知中获取 URL?
- amazon-web-services - aws lambda - 如果手动创建 s3 存储桶,如何使用 cloudformation 添加 s3 触发器
- c# - 在 C# 中检查对象的编译时类型
- java - 为什么 Selenium 在忙于加载另一个页面时无法执行 driver.get(URL)?
- python - 如何计算人脸识别系统的准确率?
- python - 如何在 pytorch 中实现 tf.nn.in_top_k
- typescript - 如何使用“p-waterfall”TypeScript 类型