Как добавить промежуточное ПО Django с пользовательскими настройками в виде пакета Python?

Я пытаюсь создать промежуточное ПО Django, которое изменяет объект запроса, добавляя дополнительные данные. Я хочу упаковать это промежуточное ПО так, чтобы для его настройки требовались только следующие шаги:

  1. Установить через PIP
  2. Добавьте маршрут к MIDDLEWARE в settings.py.
  3. Прочтите пользовательские настройки из некоторого конфигурационного файла.

Я искал способы сделать это, но не нашел. Есть руководства по созданию пакетов промежуточного программного обеспечения, но не по их правильной упаковке для распространения. Итак, у меня есть следующие вопросы.

  1. Можно ли установить промежуточное ПО через PIP?
  2. Если это возможно, есть ли хороший пример, похожий на cookiecutter, на котором можно это основать? Я пробовал (https://github.com/pydanny/cookiecutter-djangopackage), но это предполагает, что пакет является автономным приложением, что кажется излишним для пакета, состоящего из одного класса.
  3. Как лучше всего позволить пользователю настраивать поведение объекта промежуточного программного обеспечения? В идеале я бы хотел, чтобы пользователь передал вызываемый объект с настраиваемым поведением, но я не уверен, где пользователь может определить настраиваемые параметры / функции, которые передаются в промежуточное программное обеспечение при создании экземпляра.

Заранее спасибо.


person jtimmins    schedule 30.08.2018    source источник
comment
Почему какой-то конфигурационный файл? Вы можете добавить свои таможенные настройки в settings.py и использовать собственный механизм настройки Django для их чтения.   -  person yorodm    schedule 30.08.2018
comment
Всего несколько примеров: pypi.org/search/?q=Django+middleware   -  person phd    schedule 30.08.2018


Ответы (1)


Конечно, можно установить промежуточное ПО через pip. Класс промежуточного программного обеспечения - это всего лишь стандартный класс Python, и он может располагаться где угодно, если только он находится на пути Python, каковым будет установленная библиотека.

Никакого резака для печенья здесь не требуется; это для приложений и проектов.

Лучшее место для размещения настроек - это стандартный файл настроек проекта, где их можно прочитать, как и любые другие настройки из django.conf.settings.

person Daniel Roseman    schedule 30.08.2018
comment
А, ладно, думаю, я предполагал, что здесь было задействовано больше «магии», чем есть на самом деле. Если я хочу, чтобы пользователь определял настраиваемые функции с помощью вызываемого объекта, я предполагаю, что им не следует на самом деле писать функциональный код в файле settings.py. Как бы вы справились с тем, чтобы пользователь определил эту функцию, а затем ссылался на нее через файл settings.py? - person jtimmins; 30.08.2018
comment
Можете привести пример вызываемого? - person Daniel Roseman; 30.08.2018
comment
По сути, я хочу изменить только определенные запросы. Будет использоваться метод filter по умолчанию, который определяет, какие запросы следует изменить, и я хочу разрешить пользователю передавать свой собственный метод, который вместо этого вызывается для настройки того, что фильтруется. Просто что-то, что возвращает True, если его нужно изменить, и False, если этого не нужно. - person jtimmins; 30.08.2018