Django:存储项目特定中间件最理想的地方是什么?

时间:2010-07-11 22:39:59

标签: django middleware

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

我常用的django网站布局是:

projects/
templates/
common/
local/

其中:

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

我通常将项目特定于项目的中间件放在项目中,而中间件不是特定于项目的共同/中间件/

确保将templates目录添加到设置中的正确位置(或者很可能是localconfig.py,然后在设置中导入它),并确保将项目,公共和本地目录添加到PYTHONPATH。 / p>

答案 1 :(得分:4)

如果您只有几个紧密耦合的中间件类,则将它们放入app根目录下的middleware.py模块中。 (django.contrib应用就是这样做的 - 请参阅会话的应用中间件here)。

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

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