Подтвердить что ты не робот

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

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

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

Спасибо, что помогли этому n00b.

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

4b9b3361

Ответ 1

Разные question, но тот же ответ:

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

projects/
templates/
common/
local/

Где:

  • Проекты
  • содержат ваш основной проект и любые другие
  • common содержит вещи, которые вы можете распространять на разных сайтах, или, по крайней мере, не зависит от проекта, например, если вам нужно загрузить django-profile и django-registration, а не напрямую в python/site-packages
  • содержит только
  • local содержит вещи, которые будут специфичны для текущего компьютера, так что вы можете иметь надлежащим образом разделенные данные, такие как местоположение базы данных и пароль, затем затем софт-ссылку на конкретные для машины версии (например, "machine1-localconfig.py" ) на local/localconfig.py, а затем можно "импортировать localconfig" в settings.py
  • Я обычно ставил промежуточное ПО, специфичное для проекта внутри проекта, и промежуточное ПО, не относящееся к конкретному проекту, в общем/промежуточном программном обеспечении /
  • Обязательно добавьте каталог шаблонов в нужное место в настройках (или, скорее всего, localconfig.py, а затем импортируйте его в настройках) и убедитесь, что вы добавили проекты, общие и локальные каталоги в ваш PYTHONPATH.

Ответ 2

ОК, после прочтения комментариев и ответов здесь я решил создать в моем каталоге проектов каталог "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/

Ответ 3

Вот еще один способ сделать это:

Если функции утилиты могут быть автономным модулем и вы используете виртуальную среду для своего приложения django то вы можете связать функциональность в виде пакета и установить его в своем виртуальном пространстве.

Это упрощает импорт, где бы вы ни находились в своем приложении django.