Где служебные функции находятся в Django?
Где функции утилиты живут в Django? Функции, такие как пользовательское шифрование/дешифрование номера, отправка твитов, отправка электронной почты, проверка прав собственности на объекты, выборочная проверка ввода и т.д. Повторяющиеся и настраиваемые материалы, которые я использую в ряде мест в моем приложении. Я определенно ломаю DRY прямо сейчас.
Я видел несколько демонстраций, где функции были определены в models.py, хотя это не казалось мне концептуально правильным. Должны ли они войти в приложение "Утилиты", которое импортируется в мой проект? Если да, то куда они идут в утилите? Там находится файл models.py?
Спасибо, что помогли этому n00b.
ОБНОВЛЕНИЕ: Позвольте мне быть более конкретным. Скажем, мне нужна функция "light_encrypt (number)", которая принимает номер "число", умножает ее на 7, добавляет 10 и возвращает результат, а другая функция "light_decrypt (encr_number), которая принимает параметр" encr_number ", вычитает 10, делит на 7 и возвращает результаты. Где в моем дереве Django я бы это сказал? Это не промежуточное программное обеспечение, верно? Как предлагает Феликс, я создаю пакет python и импортирую его в представление, где мне нужны эти функции?
Ответы
Ответ 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.