Часть 4. Python/Django и Hello World. Структура проекта Django и создание приложений

Цикл статей «Django шаг за шагом»

Информация, которая будет дана в данном посте, исходя из заголовка, будет актуальная для версий Django 1.9.x и Python 3.4.x, что будут соответствовать последним версиям на момент написания поста. Для проверки версии Django — фреймворка существует замечательная команда:

python -c "import django; print(django.get_version())"

В мире так принято, что перед делом, надо знать, что делаешь и подходить нужно со знанием дела и, поэтому, это тот самый момент, когда пора понимать основу структуры проекта на Django. И, как уже отмечали, проект на Django — целое, которое составлено из отдельных частей(приложений, модулей, пакетов и т.п.), что дает ему гибкость в работе и продуктивность в использовании кода, соответственно. Создав проект мы должны, далее, уже создать приложения, которые будут выполнять в проекте ту или иную функцию.

Перед тем, как добавить новое приложение к проекту мы должны проделать шаги из серии прошлых частей постов, а именно:

  • установить интерпретатор Python;
  • установить менеджер пакетов pip;
  • установить модуль создания виртуальных  сред virtualenv через менеджера пакетов pip, что поможет нам управлять проектом находясь в UNIX — подобной среде;
  • создать виртуальную среду (например, test) и активировать его;
  • установить фреймворк Django через менеджера пакетов pip из активированной виртуальной среды;
  • создать новый проект(например, mysite) в текущей виртуальной среде.

Итак, проект под названием mysite у нас есть, осталось только добавить приложения к этому проекту. Но, перед этим, нужно разобраться со структурой. На данный момент, структура пустого проекта такова

django-proj-structure-for-post

По порядку разберем каждую папку и файл начального проекта, который не содержит приложений:

  • Внешняя папка mysite/ — эта директория является корневой папкой нашего сайта и просто контейнером, где будут создаваться наши приложения и файлы для управления проектом. Название данной директории ничего не значит для Django и его можно поменять на свое усмотрение;
  • manage.py — инструмент управления из командной строки при помощи которого можно управлять проектом различными путями. В частности, при помощи данного инструмента запускается наш проект на сервере Python. Про этот инструмент можно почитать дополнительно вот тут;
  • внутренняя директория mysite/ — это текущий и единственный, на данный момент, пакет Python в нашем проекте. Имя данного пакета. в дальнейшем, будет использовано для импорта внутренней структуры кода, к примеру, для импорта mysite.urls;
  • mysite/__init__.py — этот пустой файл предназначен для указания и регистрации пакетов. Наличие данного файла в директории mysite/ говорит Python, чтобы он различал эту директорию в виде пакета. Дополнительно об этом можно почитать тут;
  • mysite/settings.py — это файл установок и конфигурации текущего проекта Django;
  • mysite/urls.py — это URL — декларации текущего Django — проекта или, иначе говоря,“таблица контента” вашего Django-проекта. Дополнительно об этом можно почитать тут;
  • mysite/wsgi.py — точки входа для WSGI-совместимого веб-сервера. Подробно об этом тут.

После того, как разобрали начальную структуру пустого проекта, давайте создадим какое-нибудь(например, блог) приложение через команду:


python manage.py startapp blog 

После выполнения данной команды в корневой папке проекта появится новая директория blog/, которая будет содержать свой список файлов

django-proj-app-structure-for-post

Раскроем суть каждой папки и файла в приложении:

  • migrations/ — папка, в которой будут храниться миграции базы данных;
  • _init_.py — указание Python, чтобы он обработал папку приложения в виде пакета проекта;
  • admin.py — здесь хранятся настройки стандартной административной панели;
  • models.py — файл, в котором будут модели приложения;
  • test.py — песочница юнит-тестов;
  • views.py — файл для хранения видов.

Суть структуры приложения проекта на Django сводится к тому, что оно работает частично по образу MVC, но существенно отличается от этой модели хотябы потому, что контроллеры в MVC — это URL  Django.