python - 在桌面上部署 Django 应用程序有哪些成功的方法?

标签 python django web-applications

我有一个要部署到桌面的 Django 应用程序。我已经阅读了一些内容,发现一种方法是使用 freeze .过去我在 Python 应用程序中使用过它并取得了不同程度的成功,但我不相信它是 Django 应用程序的最佳方法。

我的问题是:您使用过哪些成功的 Django 应用程序部署方法?是否有事实上的标准方法?你遇到过死胡同吗?我需要一个跨平台解决方案。

最佳答案

我在几年前为一个作为本地守护进程运行的 Django 应用程序做过这个。它由 Twisted 推出,并由适用于 Mac 的 py2app 和适用于 Windows 的 py2exe 包装。既有浏览器又有 Air 前端。它在大多数情况下工作得很好,但我没有在野外部署它,因为更大的项目被推迟了。已经有一段时间了,我对细节有点生疏,但这里有一些提示:

  • IIRC,最有问题的是 Python 加载 C 扩展。我有一个用 C“asm”命令编写的英特尔汇编器模块,我需要加载它来获取低级系统数据。这需要一段时间才能跨两个平台工作。如果可以,尽量避免使用 C 扩展。

  • 您肯定需要安装程序。该应用很可能最终会在后台运行,因此您需要将其标记为 Windows 服务、Unix 守护程序或 Mac 启动的应用。

  • 在您的安装程序中,您需要提供一种方法来定位空闲的本地 TCP 端口。您可能必须编写安装程序运行的小 stub 例程或使用安装程序的内置脚本工具来查找尚未使用的端口并将其保存到配置文件中。然后,您将配置文件加载到您的 settings.py 以及您要部署的任何前端。那是共享端口。或者您可以只选择一个随机数,并希望桌面上没有其他服务踩到您的脚趾:-)

  • 如果您的前端和后端是独立的应用程序,那么您需要设计一个 API 以便它们相互通信。确保提供一个标志以返回原始和人类可读形式的数据。它确实有助于调试。

  • 如果您希望 Django 能够向用户发送通知,您需要与 Growl 之类的东西集成,或者获取适用于 Windows 的 Python 扩展,这样您就可以调出 toastr 弹出通知。

  • 您可能希望坚持使用 SQLite 作为数据库,在这种情况下,您需要确保使用信号量来处理多个争夺数据库(或任何其他共享资源)的请求。如果您的应用程序是通过浏览器访问的,用户可以打开多个窗口并同时点击该应用程序。如果使用自定义前端( native 、Air 等),那么您可以控制在给定时间运行的实例数量,这样就不会成为问题。

  • 您还需要对本地系统日志记录工具进行某种访问,因为该应用程序将在后台运行,并确保捕获所有异常并将其路由到系统日志中。一个很大的麻烦是调试 Windows 服务启动问题。如果没有系统日志记录,这是不可能的。

  • 如果您想保持跨平台,请注意硬编码路径。您可能必须依靠安装程序编写一个配置文件条目,其中包含您必须在启动时加载的实际安装路径。

  • 测试实际部署,尤其是跨各种防火墙的部署。一些桌面防火墙非常积极地阻止对接受传入请求的网络服务的访问。

我能想到的就这些了。希望对您有所帮助。

关于python - 在桌面上部署 Django 应用程序有哪些成功的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789673/

相关文章:

matlab - Web 应用程序、动态图表和模拟工具? (针对 MATLAB 用户)

java - 将数据库中的数据存储检索到 Java

python - 有没有办法使用没有年份的 datetime.date ?

Python Mechanize HTTP 错误 403 : request disallowed by robots. txt

python - 如何从 Django Channels 网络套接字数据包中获取当前用户?

python - Django runserver 失败,并显示 django.db.utils.IntegrityError : NOT NULL constraint failed: reviewer_post. post_id (AutoField)

python - 删除 Pandas Dataframe 中按其他列分组的列中频率最低的行

python - 如何在 Python 的 xml.dom.minidom 中设置元素的 id?

python - 从命令行传递特殊字符

java - Wicket 页面已过期