# 1.3. Приложения

Приложение в Django — это отдельный фрагмент функциональности разрабатываемого сайта, более или менее независимый от других таких же фрагментов и входящий в состав проекта. Приложение может реализовывать работу всего сайта, его раздела или же какой-либо внутренней подсистемы сайта, используемой другими приложениями.

Любое приложение представляется обычным пакетом Python, в котором содержатся модули с программным кодом. Этот пакет находится в папке проекта — там же, где располагается пакет конфигурации. Имя пакета приложения станет именем самого приложения.

Создадим приложение с именем `firstapp` командой. Для этого остановим отладочный веб-сервер, перейдем в папку проекта и введем следующую команду:

```
$ python manage.py startapp firstapp
```

Команда `startapp` утилиты `manage.py` запускает создание нового приложения с определенным именем. Структура проекта изменится, добавиться директория `firstapp` с определенными файлами:

```
firstsite
├───env/
├───firstapp/
│   ├───migrations/
│   │   └───__init__.py
│   ├───__init__.py
│   ├───admin.py
│   ├───apps.py
│   ├───models.py
│   ├───test.py
│   └───views.py
├───firstsite/
│   ├───__init__.py
│   ├───asgi.py
│   ├───settings.py
│   ├───urls.py
│   └───wsgi.py
└───manage.py
```

В следующих разделах будем рассматривать подробнее эти файлы. Если кратко, в приложении находятся следующие файлы:

1. `migrations/` — папка вложенного пакета, в котором будут храниться сгенерированные Django миграции. Пока что в папке находится лишь пустой файл `__init__.py`, помечающий ее как полноценный пакет Python;&#x20;
2. `__init__.py` — пустой файл, сигнализирующий исполняющей среде Python, что эта папка — пакет;&#x20;
3. `admin.py` — модуль административных настроек и классов-редакторов;
4. `apps.py` — модуль с настройками приложения;
5. `models.py` — модуль с моделями;
6. `tests.py` — модуль с тестирующими процедурами;
7. `views.py` — модуль с контроллерами.

Каждый раз при создании приложения, следует его регистрировать в системе Django. Откроем `settings.py` и найдем следующий фрагмент кода:

```python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
```

Список, хранящийся в переменной `INSTALLED_APPS`, перечисляет все приложения, зарегистрированные в проекте и участвующие в его работе. Изначально в этом списке присутствуют только стандартные приложения, входящие в состав Django и реализующие различные встроенные подсистемы фреймворка. Так, приложение `django.contrib.auth` реализует подсистему разграничения доступа, а приложение `django.contrib.sessions` — подсистему, обслуживающую серверные сессии.

Зарегистрируем наше приложение в системе Django. Для этого напишем:

```python
INSTALLED_APPS = [
    . . .
    'firstapp.apps.FirstappConfig',
]
```

Мы указали строку с путем к классу `FirstappConfig`, описывающему конфигурацию приложения и объявленному в модуле `apps.py` пакета приложения `firstapp`.

Сохраним все изменения и напишем свой первый контроллер.
