安装片段

时间:2011-01-17 12:15:28

标签: django django-middleware django-settings

如何在django中安装代码段? (具体是this

我有/{project}/snippets/EnforceLoginMiddleware.py文件,我在MIDDLEWARE_CLASSES内尝试了任意数量的排列来加载它以及用Google搜索django snippets install无效:(

任何帮助都会感激不尽:)

PS(为什么我找不到任何关于片段安装的文档或示例。也许我只是一个糟糕的Google员工)

3 个答案:

答案 0 :(得分:5)

“snippets”并不指向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,您的名称可能会有所不同。

不要忘记阅读代码段的文档字符串:

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.

答案 1 :(得分:2)

您需要确保您的代码段位于PYTHONPATH(sys.path)上,或者该代码段位于PYTHONPATH上的模块中。

在这种情况下,如果您将__init__.py文件添加到代码段文件夹,则会将代码段文件夹视为模块,然后您可以执行from snippets.EnforceLoginMiddleware import EnforceLoginMiddleware。我认为这是你错过的关键步骤。

您的中间件类看起来像:

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

答案 2 :(得分:1)

在您的示例中,MIDDLEWARE_CLASSES的新条目必须看起来像'{project} .snippets.EnforceLoginMiddleware.EnforceLoginMiddleware'(替换为项目的包名称)。

确保您的代码段文件夹还有一个__init__.py文件!

P.S。:这可能是因为在Django的官方组件中没有“片段”这样的东西。它们通常是简单的Python代码片段,必须这样处理。 Djangosnippets只是一个网站,你可以发布和分享django代码(也称为片段)。