什么是包装Django的应用程序的好办法?(What is a good way to packag

2019-08-03 00:17发布

我有一个由客户安装在自己的服务器上一个Django项目。 我有几个应用它们的功能的可选插件可以安装/卸载。

我想一个简单的方法来包装这些插件的应用程序,使安装/卸载无痛。 我不希望他们的模板文件介质复制到一个目录,应用到另一个,到第三个等。 我宁愿他们不需要编辑settings.py,但其没关系,如果它不能得到帮助。

理想的情况是,如果他们可以简单地解压缩到python的路径(可能是特殊的插件目录?)上的位置,并删除它卸载。 有没有一种简单的方法来打包的应用程序,使它们可以安装这种方式?

Answer 1:

我会跳过Python打包(的distutils,setuptools的,画中画等)的讨论,因为它听起来就像你更喜欢使用简单的zip文件或压缩包。 我会满足你提到一次一个的“痛点”:

模板文件 :只要你有“django.template.loaders.app_directories.load_template_source”包含在你的项目的TEMPLATE_LOADERS设置,你不应该担心这一点。 每个应用程式都可以有一个“模板/”子目录和模板在那里将被加载,就好像他们是在您的项目范围内的模板目录。

媒体文件 :应用程序的媒体是一种痛苦。 对于开发,您可以使用该功能类似app_directories模板加载器(每个应用程序中查找媒体)的自定义serve_media视图。 在生产中,你必须要么复制文件,使用符号链接,或使用网络服务器级别的别名。 有几个实用的应用程式在那里,试图抚平这个问题; 我现在用的Django staticfiles 。

编辑settings.py:围绕这一没有简单的方法。 对于它的型号,模板标签,管理命令等工作,一个应用程序在INSTALLED_APPS上市。 你可以做的是写在你的settings.py一些自定义代码,列出某个目录的内容,并动态地将它发现那里INSTALLED_APPS包。 危险一点点(大约仔细谁有权文件放置在该目录中,因为他们的钥匙你的王国认为),以及新的文件将仅在服务器重新加载被检测到,但它应该工作。

我认为,如果你放在一起这些解决方案,它可以实现你理想的情况:解压安装,删除卸载。



Answer 2:

编辑settings.py:你的插件可以读取其设置从自身设置在自己的目录文件。 他们会只需要编辑根settings.py从“INSTALLED_APPS”添加/删除插件路径。



文章来源: What is a good way to package django apps?