【问题标题】:Embedded WSGI backend for Python desktop app using webkit使用 webkit 的 Python 桌面应用程序的嵌入式 WSGI 后端
【发布时间】:2010-08-19 12:05:31
【问题描述】:

免责声明:我对问题标题中提到的任何事情都不是很熟悉。

是否可以在不启动本地 WSGI 服务器的情况下使用浏览器控件(如 Webkit)作为 WSGI 应用程序的前端(使用 Flask 等框架)?

基本上,请求和响应由 HTML UI 和 WSGI 后端之间的中间层管理。某个 URI 可能表示“本地”,例如“local://”或类似的东西,并将被路由到具有所有原始标头等的嵌入式 WSGI 应用程序。

您将失去普通 WSGI 服务器提供的任何功能,除非您自己实现它或以某种方式嵌入一个也可通过 API 使用而不是真正的 HTTP 请求的服务器。

现在我想起来了,这是唯一真正的要求:一个可通过 API 调用的 WSGI 服务器,而不仅仅是真正的 HTTP 请求。

我知道这样做的用处是值得怀疑的(甚至可能没有意义)。我的问题是这是否可能?

编辑:这是另一种说法:

我希望一个代码库既是 Web 应用程序又是桌面应用程序,使用 HTML 前端和 Python 后端。我不想在桌面应用程序的任何端口上运行服务器。实现这一目标的最简单方法是什么?

【问题讨论】:

  • 碰到这个,因为我真的很惊讶没有干净的解决方案。 Webkit+WSGI 似乎是最灵活的应用引擎。 Webkit 在 Windows 上从源代码编译是一个巨大的痛苦,对 mingw32 版本非常敏感。我现在正在探索code.google.com/p/chromiumembedded

标签: python local wsgi


【解决方案1】:

理论上可以编写自己的WSGI container 来实现完整的 API 并使其适应 WSGI。 flup 可能会带来一些启发。

【讨论】:

    【解决方案2】:

    今天早些时候,我确切地看到了您所要求的——一种通过 API 调用 WSGI 而不实际通过网络连接的方法。但是,它不应该那么难。

    顺便说一句,您可能想看看 PySide,您可能特别感兴趣的是能够将 python 元素绑定到 DOM 事件,所以如果您只是想触发 python 代码,那是一条更短的路线。

    如果您提供更多关于您希望实现的目标的详细信息,我们可能会为您拨打电话。

    【讨论】:

    • 我编辑了这个问题。我要解决的实际问题是为 Web 和桌面应用程序使用单一代码库。
    【解决方案3】:

    恢复这个,因为我们面临同样的问题,并且即将从单个视图/小部件扩展到整个应用程序。

    我所做的只是简单地将基本 URL 设置为我提供静态内容的位置,并且从一个简单的 QRC 文件:

    html = jinjatemplate.render(...)
    self._mainFrame.setHtml(html.decode('utf-8'), Qt.QUrl('qrc:///Orsync/html/'))
    

    对于通信,我们的 HTML 在大多数情况下使用 AJAX 而不是 jQuery。你可以把它包裹在一个层中,像这样$.post(...)api.post(...)

    self._mainFrame.addToJavaScriptWindowObject('api', self._webapi)
    

    您需要自己解码 URL 并创建一个请求对象,但也许这并不难做到?我们目前使用的 URL 很少(直接映射到 Python 对象/函数),因此我们自己进行映射很容易。

    返回的数据只是使用 QMainFrame.evaluateJavaScript(...) 发送,作为直接 Qt 调用或作为使用 $.getScript(...) 获取的一堆代码行(它只是评估接收到的代码)。

    我目前正在使用 CherryPy 重建一些东西,它会直接映射 url -> Python 对象,所以我希望能从中有所收获。

    否则,我希望可以通过命名管道或类似本地化的东西而不是 tcp-socket 运行 QWebKit。 :)

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      相关资源
      最近更新 更多