如何在 django 中安装代码片段?(特别是这个)
我有这个文件/{project}/snippets/EnforceLoginMiddleware.py
,我已经尝试了任意数量的排列MIDDLEWARE_CLASSES
来加载它以及谷歌搜索django snippets install
无济于事:(
任何帮助将不胜感激:)
PS(为什么我找不到任何关于安装片段的文档或示例。也许我只是一个糟糕的谷歌人)
如何在 django 中安装代码片段?(特别是这个)
我有这个文件/{project}/snippets/EnforceLoginMiddleware.py
,我已经尝试了任意数量的排列MIDDLEWARE_CLASSES
来加载它以及谷歌搜索django snippets install
无济于事:(
任何帮助将不胜感激:)
PS(为什么我找不到任何关于安装片段的文档或示例。也许我只是一个糟糕的谷歌人)
“snippets”并不指向 Django 的特定元素,它只是意味着:这里有一段代码供您使用。在这种情况下,它是一个中间件,一个特定的 Django 模块,将在 Web 请求之前和之后调用。如果需要,请阅读 django 文档
我也使用这个中间件,只需将所有内容粘贴到您的主应用程序文件夹中调用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.
您需要确保您的代码片段位于您的 PYTHONPATH (sys.path) 上,或者该代码片段位于您的 PYTHONPATH 上存在的模块中。
在这种情况下,如果您将__init__.py
文件添加到您的代码片段文件夹,这会将代码片段文件夹视为一个模块,然后您可以执行from snippets.EnforceLoginMiddleware import EnforceLoginMiddleware
. 我认为这是您缺少的关键步骤。
您的中间件类将如下所示:
MIDDLEWARE_CLASSES = (..., 'snippets.EnforceLoginMiddleware.EnforceLoginMiddleware')
在您的示例中,您对 MIDDLEWARE_CLASSES 的新条目必须看起来像“{project}.snippets.EnforceLoginMiddleware.EnforceLoginMiddleware”(替换为您的项目的包名称)。
确保您的片段文件夹也有一个 __init__.py 文件!
PS:这可能是因为当谈到 Django 中的官方组件时,没有“片段”之类的东西。它们通常是简单的 Python 代码片段,因此必须这样对待。Djangosnippets 只是一个您可以发布和共享 django 代码(也称为片段)的站点。