Где служебные функции должны жить в Django?

Где служебные функции должны жить в Django? Функции как пользовательское шифрование/дешифрование числа, отправление твитов, отправка электронного письма, проверка монопольного использования объекта, пользовательского контроля ввода, и т.д. Повторяющийся и пользовательский материал, который я использую во многих местах в моем приложении. Я определенно повреждаю DRY прямо сейчас.

Я видел некоторые демонстрации, где функции были определены в models.py, хотя это концептуально не казалось правильным мне. Они должны войти в приложение "утилит", которое импортируется в мой проект? Если так, где они входят в приложение утилит? models.py файл там?

Спасибо за то, что выручили этот n00b.

ОБНОВЛЕНИЕ: Позвольте мне быть еще более конкретным. Скажите, что мне нужна функция "light_encrypt (число)", которое берет параметрический усилитель "число", умножает ее на 7, добавляет 10 и возвращает результат и другую функцию "light_decrypt (encr_number), который берет параметрический усилитель "encr_number", вычитает 10, делится на 7 и возвращает результаты. Куда в моем дереве Django я поместил бы это? Это не промежуточное программное обеспечение, правильно? Как Felix предполагает, я создаю пакет Python и импортирую его в представление, где мне нужны эти функции?

41
задан mitchf 21 July 2010 в 18:11
поделиться

2 ответа

Другой вопрос , но тот же ответ:

Мой обычный макет для сайта django:

 projects /
шаблоны /
общий/
местный/

Где:

  • projects содержат ваш основной проект, а любые другие
  • common содержат вещи, которыми вы можете делиться на разных сайтах, или, по крайней мере, не относятся к конкретному проекту, например, если вам нужно загрузить django-profile и django-registration вместо того, чтобы иметь его непосредственно в python / site-packages.
  • шаблоны содержат только то, что
  • local содержит вещи, которые будут специфичными для текущей машины, так что вы можете правильно разделить данные, такие как местоположение базы данных и пароль - Затем я программно привязываю версии для конкретной машины (скажем, «machine1-localconfig.py») к local / localconfig.py, а затем могу «импортировать localconfig» в settings.py
  • . Обычно я помещаю промежуточное ПО, зависящее от проекта, внутри файла проект и промежуточное ПО, не зависящее от проекта в common / middleware /
  • , убедитесь, что вы добавили каталог шаблонов в нужное место в настройках (или, скорее всего, в localconfig.py, а затем импортируйте его в настройках), и убедитесь, что добавьте проекты, общие и локальные каталоги в свой PYTHONPATH.
23
ответ дан 27 November 2019 в 00:55
поделиться

Хорошо, после прочтения комментариев и ответа здесь я решил создать каталог под названием «common / util /» внутри каталога моего проекта. Внутри у меня есть файл «__ init__.py», в котором есть мои маленькие вспомогательные функции.

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

myproject/         (Django project) 
  common/  
    util/
      __init__.py  (helper functions)  
  middleware/      (custom middleware)  
  templates/       (project templates)  
  myapp/
    fixtures/      (initial data to load)
    migrations/    (south migrations)
    urls/
    views/
    admin.py
    forms.py
    models.py
    test.py

 public/           (static stuff not served by Django)
   media/
     css/
     img/
     js/
     lib/
14
ответ дан 27 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: