установка фрагментов - PullRequest
       21

установка фрагментов

2 голосов
/ 17 января 2011

Как мне установить фрагменты в django? (конкретно это )

У меня есть файл /{project}/snippets/EnforceLoginMiddleware.py, и я попробовал любое количество перестановок внутри MIDDLEWARE_CLASSES, чтобы загрузить его, а также поискать в Google django snippets install безрезультатно: (

Любая помощь будет благодарна:)

PS (Почему я не могу найти какую-либо документацию или примеры по установке фрагментов. Может, я просто плохой гуглер)

Ответы [ 3 ]

5 голосов
/ 17 января 2011

«Фрагменты» не указывают на конкретный элемент Django, это просто означает: вот фрагмент кода для использования.В данном случае это Middleware, специальный модуль Django, который будет вызываться до и после веб-запроса. Считайте 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.
2 голосов
/ 17 января 2011

Вы должны убедиться, что ваш фрагмент находится на вашей PYTHONPATH (sys.path) или что фрагмент находится в модуле, который существует на вашей PYTHONPATH.

В этом случае, если вы добавите __init__.py файл в папку с фрагментами, которая будет обрабатывать папку с фрагментами как модуль, а затем вы можете сделать from snippets.EnforceLoginMiddleware import EnforceLoginMiddleware.Я думаю, что это важный шаг, который вы упускаете.

Тогда ваши классы промежуточного программного обеспечения будут выглядеть так:

MIDDLEWARE_CLASSES = (..., 'snippets.EnforceLoginMiddleware.EnforceLoginMiddleware')
1 голос
/ 17 января 2011

В вашем примере ваша новая запись в MIDDLEWARE_CLASSES должна выглядеть как '{project} .snippets.EnforceLoginMiddleware.EnforceLoginMiddleware' (замените именем пакета для вашего проекта).

Убедитесь, что ваши фрагментыВ папке также есть файл __init__.py!

PS: это, вероятно, потому, что в официальных компонентах в Django нет такого понятия, как «фрагмент».Обычно они представляют собой простые фрагменты кода Python и должны рассматриваться как таковые.Djangosnippets - это просто сайт, где вы можете публиковать и делиться кодом django (также называемым фрагментами).

...