Django-проекты состоят из одного или нескольких приложений (application, сокращённо app). Каждое приложение — это отдельная часть проекта, предназначенная для выполнения отдельной задачи. Например, в интернет-магазине одно приложение может отвечать за управление товарами и каталогом, другое — за заказы, третье — за доставку, четвёртое — за публикацию информационных статей.В логике проекта «Анфиса для друзей» тоже можно выделить несколько задач, которые могут решаться отдельными приложениями:
- Управление сортами мороженого.
- Управление списком друзей.
Благодаря идее независимых приложений эту структуру можно легко дополнить. Например, можно добавить приложения с такими задачами:
- Узнавать погоду в городе, где живёт друг.
- Создать корзину заказов и управлять ей (формировать список отправляемого мороженого, хранить историю заказов, повторять заказы).
- Отправлять заказанное мороженое по почте.
- Создать карту друзей и управлять ей.
А можно написать приложение, продающее билеты на публичное поедание мороженого и устроить шоу.
Создаем первое приложение
Дорога в тысячу ли начинается с одного шага. В случае с приложением первый шаг — это его создание. Вот как можно создать приложение для хранения сортов мороженого при помощи manage.py.Достаточно использовать в директории с manage.py. команду:
(venv)...$ python3 manage.py startapp ice_cream
# startapp -- команда создания шаблона приложения
# ice_cream -- название приложения
Желательно, чтобы название приложения состояло из одного слова: icecreams, catalog, blog, posts, cart, orders.Как выбрать хорошее имя для приложения?С точки зрения питона приложение — это пакет, и его название должно соответствовать правилам PEP8:
- Имя должно быть в нижнем регистре.
- При использовании двух или более слов они разделяются нижним подчёркиванием. (например, icecream_show).
Есть и другие команды, с помощью которых можно создать приложение:django-admin startapp ice_cream
или python3 -m django startapp ice_cream
. Выполнение этих команд приводит к тому же результату.После выполнения команды в директории проекта будет создана новая папка, названная по имени приложения:
anfisa
├── manage.py
├── requirements.txt
├── anfisa/
└── ice_cream/ < -- cозданное приложение
├── migrations/
| └── __init__.py
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py
При создании приложения в директории создаётся базовая структура файлов, которая, по мнению разработчиков Джанго, пригодится для любого приложения. Её можно дополнять и улучшать.
__init__.py
— указывает интерпретатору Python, что текущий каталог — это пакет (например, его можно импортитровать; если нет__init__.py
— импорт может сработать некорректно).admin.py
— здесь можно настроить отображение админ-зоны приложения. Документация.apps.py
— настройки конфигурации приложения. Документация.models.py
— здесь разработчик описывает устройство базы данных приложения. Документация.migrations/
— тут хранится история изменений в базе данных. Документация.tests.py
— файл для тестов приложения. Документация.views.py
— тут хранятся обработчики запросов (функции или классы, получающие запрос и генерирующие ответ). Документация.
Уже очень скоро вы будете ориентироваться в этой структуре легко и непринуждённо
Регистрируем приложение
В каждом приложении автоматически создаётся файл apps.py
, в нём описываются настройки приложения. В этом файле автоматически создаётся класс, конфигурирующий приложение; по умолчанию в нём создаётся лишь одно поле, name
# anfisa/ice_cream/apps.py
from django.apps import AppConfig
class IceCreamConfig(AppConfig):
name = 'ice_cream'
# Тут можно указать, например, поле verbose_name
# под этим именем приложение будет видно в админке.
# verbose_name = 'Управление сортами мороженого'
Чтобы Django-проект узнал о том, что в нем есть приложение, нужно это приложение зарегистрировать: добавить его конфиг в список установленных приложений INSTALLED_APPS
в файле settings.py
:
# anfisa/settings.py
INSTALLED_APPS = [
'ice_cream.apps.IceCreamConfig', # Добавленная запись
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Приложение ice_cream
создано и зарегистрировано, но пока ничего не умеет.Зарегистрировать приложение можно и иным способом: можно добавить в INSTALLED_APPS
не конфиг, а имя приложения, ice_cream
. Но практичнее регистрировать через конфиг: ведь тогда в apps.py можно будет в любой момент добавить дополнительные настройки приложения. При регистрации через имя такой возможности не будет.