Как вы управляете своими приложениями Django?
Я просто хотел попробовать построить проект с Django. Поэтому у меня есть (основной) вопрос о том, как управлять таким проектом. Поскольку я не могу найти какие-либо руководящие принципы, как разделить проект на приложения.
Давайте возьмем вид SO в качестве примера. Какие приложения вы бы использовали? Я бы сказал, что должны быть приложения "пользователи" и "вопросы". Но что, если бы существовала тематическая система со статическими статьями? Возможно они также могли получить голоса. Как построить структуру приложений тогда? Одно приложение для "вопросов", "голосов" и "тем" или только одно приложение "контента"?
Я понятия не имею, что делать. Может быть, это потому, что я пока не очень много знаю о Джанго, но мне тоже интересно...
5 ответов
Здесь нет жестких правил, но я бы сказал, что лучше ошибаться на стороне более специализированных приложений. В идеале приложение должно обрабатывать только одну функциональную проблему: "пометка", "комментирование", "авторизация / аутентификация" или "публикации". Этот тип дизайна также поможет вам повторно использовать доступные приложения с открытым исходным кодом вместо того, чтобы заново изобретать колесо (т.е. Django поставляется с приложениями для аутентификации и комментариев, django-tagging или django-taggable почти наверняка могут делать то, что вам нужно, и т. Д.).
Общие внешние ключи могут помочь вам отделить приложения, такие как тегирование или комментирование, которые могут применяться к моделям из нескольких других приложений.
Вы должны попытаться разделить проект на максимально возможное количество приложений. Для большинства проектов приложение не будет содержать более 5 моделей. Например, такой проект, как SO, будет иметь отдельные приложения для UsersProfiles, Questions, Tags (для этого есть готовое приложение в django) и т. Д. Если бы существовала система со статическими страницами, которая также была бы отдельным приложением (есть готовые). для этого). Вам также следует постараться сделать ваши приложения как можно более общими, чтобы вы могли использовать их в других проектах. На многоразовых приложениях есть хорошая презентация.
Хороший вопрос, который нужно задать себе, когда вы решаете, писать приложение или нет, "могу ли я использовать это в другом проекте?". Если вы думаете, что могли бы, то подумайте, что нужно сделать, чтобы приложение было как можно более независимым; Как вы можете уменьшить зависимости, чтобы приложение не зависело от чего-то определенного для конкретного проекта.
Вот несколько способов сделать это:
- Предоставление каждому приложению своего собственного urls.py
- Позволяет передавать типы моделей в качестве параметров, а не явно указывать, какие модели используются в ваших представлениях. Общие взгляды используют этот принцип.
- Сделайте ваши шаблоны легко переопределенными, передав некоторый параметр template_name в ваш urls.py
- Убедитесь, что вы можете сделать обратный поиск URL с вашими объектами и представлениями. Это означает именование ваших представлений в urls.py и создание методов get_absolute_url в ваших моделях.
- В некоторых случаях, таких как Tagging, GenericForeignKeys можно использовать для привязки модели в вашем приложении к любой другой модели, независимо от того, имеет ли ForeignKeys "оглядывающийся" на нее.
Как и любой набор зависимостей... попробуйте найти наиболее полезные автономные аспекты проекта и создать эти автономные приложения. Другие приложения Django будут иметь функциональность более высокого уровня и повторно использовать части приложений самого низкого уровня, которые вы настроили.
В моем проекте у меня есть приложение-календарь с собственным объектом Event в своих моделях. У меня также есть настроенная база данных автобуса, и для времени отправления и продолжительности я использую объект Event календаря прямо в моих таблицах RideShare. База данных объединяет информацию о календаре и бесплатно получает все возможности экспорта.ics и календаря из приложения календаря.
Есть несколько хитростей в получении многократно используемых приложений, например, присвоение имени каталогу шаблонов: project/app2/templates/app2/index.html. Это позволяет вам обратиться к app2 / index.html из любого другого приложения и получить правильный шаблон. Я выбрал его, глядя на встроенные многократно используемые приложения в самом Django. Pinax немного чудовищен по размерам, но также демонстрирует красивую многократно используемую структуру приложения.
Если вы сомневаетесь, забудьте о многоразовых приложениях. Поместите все свои сообщения и опросы в одном приложении и пройти через один оборот. Во время процесса вы обнаружите, какие шаги кажутся ненужными, и что в будущем их можно будет использовать как нечто отдельное.
Я расскажу вам, как я подхожу к такому вопросу: я обычно сижу с листом бумаги и рисую прямоугольники (функциональные возможности) и стрелки (взаимозависимости между функциональными возможностями). Я уверен, что есть методологии или другие вещи, которые могут вам помочь, но мой подход обычно работает для меня (YMMV, конечно).
Знание того, каким должен быть сайт, является базовым.;)