【问题标题】:Django: What is the most ideal place to store project-specific middleware?Django:存储项目特定的中间件最理想的地方是什么?
【发布时间】:2010-07-11 22:39:59
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: django middleware


    【解决方案1】:

    我通常的 django 网站布局是:

    projects/
    templates/
    common/
    local/
    

    地点:

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

    我一般把项目特定的中间件放在项目里面,非项目特定的中间件放在 common/middleware/

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        相关资源
        最近更新 更多