@artinnok
бекенд-программист

По какому принципу создавать приложения django?

Интересен именно принцип создания приложений, логика.
Нельзя же просто так плодить приложения для каждого элемента сайта:

index
checkout
contacts
electronics
books
phones
и т.д.

Какая должна быть логика создания приложений? Что должно делать приложение? Какой функционал вкладывать в одно приложение (сколько действий должно делать приложение)? Сколько моделей должно быть в приложении?
  • Вопрос задан
  • 3193 просмотра
Решения вопроса 2
vechnoe
@vechnoe
Tornado, Django, Postgres, Asyncio, Clojure
Сначала вы должны поставить задачу. Отталкиваясь от конкретной задачи, вы строите набор приложений. Вот пример из реальной жизни (интернет-магазин):

core -- все что относится к главной странице сайта, и т. д. :
orders
search
shopping_cart
news
billing
docs
cabinet

Каждое приложение должно делать хорошо только одну вещь (согласно идеологии UNIX). Компонуя приложения (модули) с относительно простой логикой, можно построить сложную систему. И такие модули проще тестировать.

Моделей может быть в каждом приложении много, а может быть и одна. Все зависит от структуры данных, которые должны обрабатываться приложением. В каждом приложении во views.py кладете контроллеры (view), которые относятся непосредственно к отображению страницы. Бизнес-логика не должна быть в контроллерах. Всю логику выносите в функции в отдельный файл, например utils.py или по названию функционала, например cool_vk_parser.py, а потом импортируете, где нужно. Вся логика которая связанна напрямую с данными кладите в методы модели (например get_cart_items_count).

Также в каждом приложении должен быть модуль с тестами tests.py для тестов именно этого приложения.

UPD Итак, структура приложения джанго (* -- опциональные модули):

my_app /
    models.py -- модели
    views.py -- view для отображения страниц
   * admin.py -- описываем отображение модели в админке
    urls.py -- урлы
   * forms.py -- формы
   * validators.py -- валидаторы форм 
   * middleware.py 
   * tasks.py -- задания для celery
    tests.py -- тесты
   * handlers.py
   * utils.py
   * templatetags/ -- теги для шаблонов
        my_tags.py
    migrations/ -- миграции (создается автоматически при миграции)


UPD2: Структура всего проекта:
UPD3: Added .env
project/ 
    .env/  # Каталог виртуального окружения. Нужно прописывать в .gitignore
    src/
        apps/
            one_app/
            two_app/
         static/
             images/
             fonts/
             css/
             js/
          templates/
              # Директории шаблонов по названию приложений
              one_app/
              two_app/
              base.html  # базовый шаблон
              index.html # шаблон главной
    media/ # для пользовательских файлов. Создается автоматом. Прописывать в .gitignore.
    urls.py 
    settings.py
    requirements.py # зависимости проекта
    .gitignore # Прописываем сюда все,  что не должно попасть в репозиторий
Ответ написан
@pacahon
FYI: Про структуру приложения хорошо написано в Two Scoops of Django: Best Practices for Django 1.8 Да и в целом, если будете писать на django, рекомендую к прочтению. Содержит много полезных ссылок.
Про философию django можно здесь почитать https://docs.djangoproject.com/en/1.8/misc/design-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы