python - 在 phonegap 应用程序中捆绑 python "back end"代码

标签 python plugins cordova client-server

精简版:

是否有一种标准方法可以将 Python“后端服务器”类型的代码与 phonegap 客户端应用程序捆绑在一起?

长版:

我有很多应用程序正在考虑移植到 phonegap。一般来说,应用程序是用 Python 编写的。其中一些具有 Web 前端,一些是具有基于 wxpython 接口(interface)的独立 Python 应用程序。

所以每个应用程序都有一些客户端的东西,这些东西已经在 html+javascript+css 中,或者我很乐意将其转换为 html+javascript+css。

对于服务器端,对于某些应用程序来说,将服务器代码留在服务器上是可以的。但对于某些/大多数人来说,我想将服务器端逻辑与 phonegap 应用程序打包在一起,这样它就可以成为一个独立的应用程序。这个需求来自于两个需求。一是这些应用程序中有许多用于应急响应,即使在手机信号塔和其他网络基础设施不可用的情况下也需要运行。另一个原因是一些应用程序非常简单,不保证客户端/服务器架构——它们只是碰巧有很多用 Python 编写的“后端逻辑”类型的代码。

现在,我知道我可以将所有后端 Python 逻辑移植到 javascript,但我希望找到一个解决方案,让这个庞大的代码库可以保留在 Python 中。

我的想法是我可以编写一个 phonegap 插件,它实际上包含完整的 Python 解释器(至少完整到足以处理我的代码库中的大部分内容)。 (也就是说,iOS 和 Android 都允许 native C 代码,所以我应该能够从源代码编译 Python——或者至少编译其中的大部分内容,或者只是链接到其他人构建的 iOS 和 Android Python 库。)

所以在 javascript 代码中,我可以让客户端调用一些函数,例如“InvokeBackEndMethod()”。这很像 ajax 调用,但不是在网络上调用,而是将查询/url/消息发送到 Python 插件。我的理解是 phonegap 插件可以保持持久状态(例如,数据库插件允许您调用一次打开数据库,随后调用从中读取并关闭它)。因此,Python“服务器”代码可以像在真实服务器上一样维护其状态。事实上,Python 代码可能正在运行一个像 cherrpy 这样的网络框架,所以它真的就像在同一个移动应用程序中同时运行客户端和服务器。

我的问题是:

(1) 这个方案听起来合理吗?

(2) 有人已经解决了这个问题吗?我希望找到一个名为“phonegap 服务器”的项目,它本质上是一个“通用”PhoneGap 扩展,因为它可以接受来自客户端的任意调用,并将这些调用分配给您选择的各种机制:Python、Java、mono 等(即,这个通用的 phonegap 扩展将被各种语言“插件”“扩展”,然后这些插件又将被用户添加到给定的任何业务逻辑“扩展”语)。大多数人可能不需要这样的项目,因为他们不需要断开连接和/或他们没有他们想要部署的“后端”逻辑的大型代码库在独立的应用程序中,但保留原始语言。但似乎有些人肯定需要它,不是吗?

最佳答案

您应该查看两个截然不同的计划:http://omz-software.com/pythonista/ 允许导出到 Xcode 项目。

https://github.com/brython-dev/brython 使用 Python 而不是 Javascript 进行 HTML5 开发。

关于python - 在 phonegap 应用程序中捆绑 python "back end"代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17314959/

相关文章:

android - 有没有办法通过应用程序内的按钮将应用程序最小化到后台?

facebook - Grails Facebook 插件 - 如何处理无效用户

android - Ionic 3 版本未更新——Android/Mac

python - Python 中 DataFrame 中数组值的 One-hot 编码

python - 如何为 flask 应用程序设置空白默认语言环境?

python - 我应该对 Python 中的错误/非法参数组合提出哪个异常?

python - 如何覆盖 nltk 的 pos_tag 分配给文本的 POS 标签?

plugins - TYPO3 4.7.2 通过 typescript 包含 extbase 插件

cordova - typescript 错误 : Cannot find name 'cordova'

android - 将 Intent 过滤器添加到 config.xml 中,以便在 AndroidManifest.xml (Ionic 2) 中正确插入