13

我知道我可以“将它存储在我的 python 路径中的任何位置”等等,但是我可以用来为我的项目存储中间件类的有组织的模式是什么?

我通过 mod_wsgi 将我的项目根目录和项目目录附加到 sys 路径:

sys.path.append( '/srv/' )
sys.path.append( '/srv/workarounds/' )

后一行是项目根目录。例如,假设我想应用这个中间件类:http ://djangosnippets.org/snippets/1179/

我是否只需将片段内容复制到 middleware.py 文件并将其转储到我的项目根目录中?为中间件创建一个目录,将该目录添加到我的 python 路径中?

4

2 回答 2

7

我通常的 django 网站布局是:

projects/
templates/
common/
local/

在哪里:

  • projects 包含您的主要项目和任何其他项目
  • common 包含您可以跨站点共享的内容,或者至少不是特定于项目的内容,例如,如果您需要下载 django-profile 和 django-registration 而不是直接在 python/site-packages 中拥有它
  • 模板只包含那个
  • local 包含特定于当前机器的内容,以便您可以正确分离数据,例如数据库位置和密码 - 然后我将特定于机器的版本(例如“machine1-localconfig.py”)软链接到local/localconfig.py 然后可以在 settings.py 中“import localconfig”

我通常将项目特定的中间件放在项目中,而不是项目特定的中间件放在 common/middleware/

确保将模板目录添加到设置中的正确位置(或者很可能是 localconfig.py,然后将其导入设置中),并确保将项目、公共和本地目录添加到您的 PYTHONPATH。

于 2010-07-11T22:45:16.483 回答
5

如果您只有几个紧密耦合的中间件类,请将它们放入middleware.py应用根目录下的模块中。(这就是django.contrib应用程序的做法 - 请在此处查看会话的应用程序中间件)。

如果您有许多不同的中间件类,请创建一个包含相关中间件类的子模块的中间件包。尽管如果您最终遇到这种情况,请考虑如何将您的项目重构为几个迷你应用程序,这些应用程序都可以解决特定需求(并将它们开源:))。

就个人而言,我有一个通用的 django 包,我将通用中间件(如您的链接LoginRequiredMiddleware类)转储到一个middleware包中。如果这在您的项目环境中有意义,我强烈建议您这样做。它节省了我无数小时的重复和错误修复。 django-commondjango-annoying是这种项目布局的好例子

于 2010-07-11T23:36:51.837 回答