Где должны быть служебные функции в Django? - PullRequest
37 голосов
/ 21 июля 2010

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

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

Спасибо за помощь в этом n00b.

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

Ответы [ 3 ]

21 голосов
/ 21 июля 2010

Разное вопрос , но тот же ответ:

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

projects/
templates/
common/
local/

Где:

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

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

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

1 голос
/ 20 июля 2014

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

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

Это позволяет легко импортировать все, что вам нужно, в ваше приложение django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...