我想构建一个混合应用程序(嵌入在桌面应用程序中的 Web 技术)。
我将从 Web 版本开始,然后使用 WebKit 将其嵌入,但我不希望嵌入式版本通过 TCP 端口为请求提供服务。
使用 WebKit (Qt,Gtk) 我可以拦截所有 URL 请求并对其采取行动。
我缺少的是一种无需通过 TCP(或 WSGI)即可调用 Flask URL-to-callable 调度程序的方法。
有什么比使用调试器分析调用堆栈更好的想法吗?
Simon Sapin 在(相当活跃的)Flask 邮件列表中回答:
为什么不是 WSGI?
你必须在某个地方找到一个 Python 解释器。然后,您需要使用来自 WebKit 的数据(例如请求的 URL)以某种方式调用您的应用程序,并获得响应。WSGI 就是这样:Python 函数(或其他可调用对象)的调用约定。
如果 WSGI 比您想要的更复杂,您可以使用测试客户端:
- http://flask.pocoo.org/docs/api/#flask.Flask.test_client
- http://werkzeug.pocoo.org/docs/test/#werkzeug.test.Client
- http://werkzeug.pocoo.org/docs/test/#werkzeug.test.EnvironBuilder
这就是我在 Frozen-Flask 中的做法。它在 WSGI 级别模拟对 Flask 应用程序的 HTTP 请求,并将响应写入静态文件。测试客户端只是进行 WSGI 调用的一种更简单的方法:
https://github.com/SimonSapin/Frozen-Flask/blob/master/flaskext/frozen/__init__.py#L228
WSGI 确实是 Flask 的“入口点”。
除此之外,如果您对 Flask 内部工作感兴趣,请从这里开始:
https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1477