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

15

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

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

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

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

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

2个回答

8

我通常在django网站上使用以下布局:

projects/
templates/
common/
local/

在这里:

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

一般来说,我会将项目特定的中间件放在项目内部,将非项目特定的中间件放在 common/middleware/ 中。

确保将 templates 目录添加到 settings 中的正确位置(或者更可能是在 localconfig.py 中添加它,然后在 settings 中导入),并确保将 projects、common 和 local 目录添加到 PYTHONPATH 中。


6
如果您只有几个紧密耦合的中间件类,请将它们放入应用根目录下的middleware.py模块中。(这是django.contrib应用程序的做法-请查看会话应用程序的中间件此处。)
如果您有许多不同的中间件类,请创建一个中间件包,其中包含相关中间件类的子模块。但是,如果您最终陷入了这种情况,请考虑如何将项目重构为解决特定需求的几个小型应用程序(并开源它们 :))。
就我个人而言,我有一个公共的django包,其中我将常见的中间件(例如您链接的LoginRequiredMiddleware类)放入middleware包中。如果在您的项目上下文中有意义,我强烈建议这样做。它节省了我无数小时的重复和错误修复。django-commondjango-annoying是这种项目布局的好例子。

损坏的链接 :( - java-addict301

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接