【问题标题】:installing snippets安装片段
【发布时间】:2011-06-10 10:13:15
【问题描述】:

如何在 django 中安装 sn-ps? (特别是this)

我有文件/{project}/snippets/EnforceLoginMiddleware.py,我尝试了MIDDLEWARE_CLASSES 中的任意数量的排列来加载它,以及谷歌搜索django snippets install 无济于事:(

任何帮助将不胜感激:)

PS(为什么我找不到任何关于安装 sn-ps 的文档或示例。也许我只是一个糟糕的 googler)

【问题讨论】:

    标签: django django-middleware django-settings


    【解决方案1】:

    "sn-ps" 并不指向 Django 的特定元素,它只是意味着:这里有一段代码供您使用。在这种情况下,它是一个中间件,一个特定的 Django 模块,将在 Web 请求之前和之后调用。 Read django docs 如果需要

    我也使用这个中间件,只需将所有内容粘贴到您的主应用程序文件夹中名为 middleware.py 的文件中(任何应用程序文件夹都可以,因为在 INSTALLED_APPS 中提到了此应用程序)

    然后将这些行添加到您的 settings.py 文件中:

    MIDDLEWARE_CLASSES = (
        #...all others middleware, on the last line, paste :
        'main.middleware.EnforceLoginMiddleware',
    )
    

    请注意,这里我放置文件的应用名为main,您的可能会使用不同的名称。

    不要忘记阅读 sn-p 的文档字符串:

    Middlware class which requires the user to be authenticated for all urls except 
    those defined in PUBLIC_URLS in settings.py. PUBLIC_URLS should be a tuple of regular 
    expresssions for the urls you want anonymous users to have access to. If PUBLIC_URLS 
    is not defined, it falls back to LOGIN_URL or failing that '/accounts/login/'.  
    Requests for urls not matching PUBLIC_URLS get redirected to LOGIN_URL with next set 
    to original path of the unauthenticted request. 
    Any urls statically served by django are excluded from this check. To enforce the same
    validation on these set SERVE_STATIC_TO_PUBLIC to False.
    

    【讨论】:

      【解决方案2】:

      您需要确保您的 sn-p 在您的 PYTHONPATH (sys.path) 上,或者确保 sn-p 在您的 PYTHONPATH 上存在的模块中。

      在这种情况下,如果您将__init__.py 文件添加到您的sn-ps 文件夹,那么会将sn-ps 文件夹视为一个模块,然后您可以执行from snippets.EnforceLoginMiddleware import EnforceLoginMiddleware。我认为这是您缺少的关键步骤。

      您的中间件类将如下所示:

      MIDDLEWARE_CLASSES = (..., 'snippets.EnforceLoginMiddleware.EnforceLoginMiddleware')
      

      【讨论】:

      • 谢谢。你的权利,但我决定将模块包含在项目目录根目录的主 middleware.py 文件中,因为它将在系统范围内应用
      • @Sevenearths,这也正是它应该在的地方。一开始我在弄清楚如何包含任意目录中的文件时遇到了一些麻烦。 Groking 模块和 PYTHONPATH 一开始可能会让人感到困惑。
      【解决方案3】:

      在您的示例中,您对 MIDDLEWARE_CLASSES 的新条目必须类似于“{project}.sn-ps.EnforceLoginMiddleware.EnforceLoginMiddleware”(替换为您项目的包名称)。

      确保您的 sn-ps 文件夹也有一个 __init__.py 文件!

      P.S.:这可能是因为 Django 中的官方组件没有“sn-p”之类的东西。它们通常是简单的 Python 代码片段,必须这样对待。 Djangosn-ps 只是一个您可以发布和分享 django 代码(也称为 sn-ps)的站点。

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        相关资源
        最近更新 更多