Django для начинающих: что это за фреймворк и с чего начать
Что такое фреймворк Django и как его изучать с нуля: установка, проект и приложения, модели, view, шаблоны, админка, API и деплой — с примерами кода.
Содержание · 17 разделов
- Что такое Django
- Что входит в Django из коробки
- Для чего используют Django
- Django, Flask или FastAPI
- Что нужно знать перед изучением Django
- Какая версия Django нужна
- Как устроен Django: путь запроса и MTV
- Установка Django
- Создание проекта
- settings.py в двух словах
- Создание приложения
- Первое приложение: модель, view, URL и шаблон
- Модель и миграции
- Представления (views)
- Маршруты (URL)
- Шаблоны
- Админка Django
- Пользователи, вход и права
- Django как бэкенд: REST API
- Деплой и фоновые задачи
- Как создать сайт на Django: общий план
- Как стать Django-разработчиком
- Маршрут изучения Django с нуля
- Частые вопросы
- Django — это язык программирования?
- Как правильно: Django или Джанго?
- Сложно ли изучить Django с нуля?
- Нужно ли знать JavaScript?
- Подходит ли Django для больших проектов?
- Поддерживает ли Django асинхронность?
- Итог
Django (джанго) — бесплатный веб-фреймворк на языке Python для создания сайтов и бэкенда веб-приложений. Фреймворк Django берёт на себя рутину — маршрутизацию URL, работу с базой данных, формы, пользователей, защиту от типовых атак и даже готовую админку, — а вы пишете только логику своего проекта.
Начать можно за пять минут:
python -m pip install django
django-admin startproject config .
python manage.py migrate
python manage.py runserver
Это руководство — карта для тех, кто изучает Django с нуля. Мы кратко разберём каждую тему, которая понадобится начинающему бэкенд-разработчику, соберём маленькое работающее приложение и дадим ссылки на подробные статьи по каждому шагу. Примеры проверены на Django 6.1 и 5.2 LTS.
Что такое Django
Django — это фреймворк, то есть готовый каркас приложения с набором инструментов и правилами, куда их подключать. Языком программирования Django не является: весь код в Django-проекте пишется на Python. Поэтому запросы вроде «джанго язык программирования» обычно означают связку Python + Django — язык и фреймворк на нём.
Немного фактов:
- Django появился в редакции американской газеты Lawrence Journal-World и в 2005 году стал проектом с открытым исходным кодом. Назван в честь джазового гитариста Джанго Рейнхардта.
- Распространяется по лицензии BSD — бесплатно, в том числе для коммерческих проектов.
- Развитием занимается некоммерческая организация Django Software Foundation и сообщество.
- Девиз «batteries included» («батарейки в комплекте»): многое, что в других фреймворках подключают отдельными библиотеками, в Django уже есть.
Что входит в Django из коробки
| Компонент | Для чего |
|---|---|
| ORM и миграции | Работа с базой данных через Python-классы, без ручного SQL |
| URL-диспетчер | Сопоставление адресов страниц с обработчиками |
| Шаблонизатор | HTML-страницы с переменными, циклами и наследованием |
| Формы | Отрисовка, валидация и обработка данных от пользователя |
| Аутентификация | Пользователи, группы, права, вход и выход, хеширование паролей |
| Админка (Django Admin) | Готовый интерфейс для управления данными |
| Безопасность | Защита от CSRF, XSS, SQL-инъекций и clickjacking по умолчанию |
| Интернационализация | Переводы интерфейса, форматы дат и чисел, часовые пояса |
| Кеширование, почта, сигналы | Типовые задачи веб-приложения без сторонних пакетов |
Официально поддерживаемые базы данных — PostgreSQL, MariaDB, MySQL, Oracle и SQLite. Для обучения подходит SQLite: она встроена в Python и не требует установки.
Для чего используют Django
Бэкенд на Django — основная сфера применения фреймворка:
- сайты с серверной отрисовкой — медиа, блоги, каталоги, личные кабинеты, сервисы с формами;
- бэкенд и REST API для фронтенда на React или Vue и мобильных приложений — обычно вместе с Django REST Framework;
- внутренние системы — CRM, бэк-офис, панели модерации, где админка Django экономит месяцы разработки;
- CMS и контентные проекты — на Django построены Wagtail и django CMS (как выбрать между ними — в сравнении CMS на Django).
Django особенно хорош там, где много данных и бизнес-логики, нужна админка и важна скорость разработки. Для маленького сервиса из пары эндпоинтов или высоконагруженного асинхронного API иногда удобнее лёгкие фреймворки.
Django, Flask или FastAPI
| Фреймворк | Подход | Когда выбирать |
|---|---|---|
| Django | Всё включено: ORM, админка, auth, формы, шаблоны | Сайты и бэкенд с базой данных, админкой и пользователями |
| Flask | Минимальное ядро, остальное — расширения | Небольшие сайты и сервисы, полный контроль над стеком |
| FastAPI | Асинхронные API с валидацией через Pydantic | API-first проекты, микросервисы, высокая конкурентность |
Подробное сравнение — в статье «FastAPI, Django или Flask: что выбрать» и обзоре веб-фреймворков Python.
Что нужно знать перед изучением Django
Django — фреймворк для Python, поэтому сначала нужна база языка: переменные, функции, списки и словари, классы, импорты, исключения. Если вы только начинаете, пройдите Python для начинающих, а потом возвращайтесь к Django.
Кроме Python пригодятся:
- основы HTML и CSS — чтобы писать шаблоны;
- понимание HTTP: что такое запрос, ответ, методы GET и POST, коды 200/404/500;
- базовые представления о реляционных базах данных: таблицы, первичные и внешние ключи;
- командная строка и виртуальные окружения Python.
Какая версия Django нужна
| Версия | Python | Статус |
|---|---|---|
| Django 6.1 | 3.12+ | актуальный выпуск |
| Django 6.0 | 3.12+ | предыдущий выпуск ветки 6.x |
| Django 5.2 LTS | 3.10+ | версия с длительной поддержкой |
Для обучения берите актуальную версию: она ставится по умолчанию командой pip install django на Python 3.12 и новее. Основы, которые описаны в этом руководстве, одинаково работают в 5.2 и 6.x. Различия заметны в деталях: с Django 6.0 настройка DEFAULT_AUTO_FIELD по умолчанию равна BigAutoField и исчезла из шаблона settings.py, а в Django 6.1 появилась настройка MAILERS — она заменит EMAIL_BACKEND и связанные параметры EMAIL_*, которые теперь объявлены устаревшими.
Как устроен Django: путь запроса и MTV
Django построен по схеме MTV — Model, Template, View:
- Model (модель) — данные и правила работы с ними; класс Python, которому соответствует таблица в базе.
- View (представление) — функция или класс, которые принимают HTTP-запрос и возвращают ответ.
- Template (шаблон) — HTML с подстановкой данных.
Путь одного запроса выглядит так:
Браузер
→ WSGI/ASGI-сервер (runserver, Gunicorn, Uvicorn)
→ middleware (сессии, CSRF, пользователь…)
→ urls.py: какой view обработает адрес
→ view: бизнес-логика, запрос к моделям через ORM
→ шаблон: HTML с данными
→ middleware в обратном порядке
→ ответ браузеру
Каждое звено этой цепочки — отдельная тема для изучения. Middleware — слой, через который проходят все запросы и ответы: он добавляет request.user, проверяет CSRF-токены, выставляет заголовки безопасности. Как он работает и как написать свой — в статье «Django Middleware».
Установка Django
Создайте папку проекта и виртуальное окружение, затем установите Django через pip.
Windows:
mkdir mysite
cd mysite
py -m venv .venv
.venv\Scripts\activate
python -m pip install django
macOS и Linux:
mkdir mysite
cd mysite
python3 -m venv .venv
source .venv/bin/activate
python -m pip install django
Проверьте установку командой python -m django --version. Выбор версии, requirements.txt и разбор ошибок вроде «django-admin не распознано» — в статье «Как установить Django». Если Python ещё не установлен, начните с установки Python.
Создание проекта
Проект — это сайт целиком: настройки, корневые URL, точки входа для серверов. Создаётся он командой startproject:
django-admin startproject config .
python manage.py migrate
python manage.py runserver
Откройте http://127.0.0.1:8000/ — увидите стартовую страницу Django. Структура проекта:
mysite/
├── manage.py # запуск команд: runserver, migrate, startapp…
└── config/
├── settings.py # настройки проекта
├── urls.py # корневые маршруты
├── asgi.py # точка входа для ASGI-серверов
└── wsgi.py # точка входа для WSGI-серверов
Разбор каждого файла, запуск на другом порту и запуск уже существующего проекта — в статье «Как создать проект Django».
settings.py в двух словах
Все настройки проекта живут в одном модуле. Начинающему важно знать несколько из них:
INSTALLED_APPS— подключённые приложения, свои и встроенные;DATABASES— подключение к базе данных (по умолчанию SQLite-файлdb.sqlite3);DEBUG— режим отладки с подробными страницами ошибок; в продакшне всегдаFalse;ALLOWED_HOSTS— домены, на которых разрешено работать сайту;LANGUAGE_CODEиTIME_ZONE— язык интерфейса и часовой пояс, например'ru'и'Europe/Moscow'.
Как читать настройки в своём коде через django.conf.settings, что делает DJANGO_SETTINGS_MODULE и как разделить конфигурацию для разработки и продакшна — в статье «settings.py в Django».
Создание приложения
Функциональность сайта пишут в приложениях — модулях с одной областью ответственности: блог, каталог, личный кабинет. Создадим приложение blog:
python manage.py startapp blog
И зарегистрируем его:
# config/settings.py
INSTALLED_APPS = [
# ...встроенные приложения...
'blog',
]
Чем приложение отличается от проекта, что лежит в каждом файле и как вынести приложения в подпапку — в статье «Как создать приложение в Django».
Первое приложение: модель, view, URL и шаблон
Соберём минимальный блог: список постов и страница поста.
Модель и миграции
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField('Заголовок', max_length=200)
text = models.TextField('Текст')
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created_at']
def __str__(self):
return self.title
Модель описывает таблицу, а миграции создают её в базе:
python manage.py makemigrations blog
python manage.py migrate
Поля, связи между моделями и параметры Meta разобраны в статье «Модели Django». Как фильтровать, сортировать и агрегировать данные — в шпаргалке по Django ORM и QuerySet.
Представления (views)
# blog/views.py
from django.shortcuts import get_object_or_404, render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
get_object_or_404 вернёт ответ 404, если поста с таким pk нет, — вместо ошибки сервера.
Маршруты (URL)
# blog/urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.post_list, name='post_list'),
path('<int:pk>/', views.post_detail, name='post_detail'),
]
# config/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
Конвертер <int:pk> в адресе /blog/1/ извлекает число и передаёт его во view аргументом pk. Остальные конвертеры, reverse() и разбор ошибки NoReverseMatch — в статье об URL-маршрутах в Django.
Шаблоны
Шаблоны приложения лежат в blog/templates/blog/:
<!-- blog/templates/blog/post_list.html -->
<h1>Блог</h1>
<ul>
{% for post in posts %}
<li><a href="{% url 'blog:post_detail' post.pk %}">{{ post.title }}</a></li>
{% empty %}
<li>Постов пока нет.</li>
{% endfor %}
</ul>
<!-- blog/templates/blog/post_detail.html -->
<h1>{{ post.title }}</h1>
{{ post.text|linebreaks }}
<a href="{% url 'blog:post_list' %}">Все посты</a>
Двойные фигурные скобки выводят переменную, теги в {% %} управляют логикой, а фильтр linebreaks превращает переносы строк в абзацы. Шаблонизатор по умолчанию экранирует HTML, поэтому текст пользователя не сможет внедрить скрипт на страницу.
Запустите python manage.py runserver и откройте http://127.0.0.1:8000/blog/. Постов пока нет — добавим их через админку.
Админка Django
Админка — одна из главных причин выбрать Django. Зарегистрируйте модель:
# blog/admin.py
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'created_at']
search_fields = ['title']
Создайте администратора и войдите на http://127.0.0.1:8000/admin/:
python manage.py createsuperuser
Теперь посты можно создавать, искать и редактировать через готовый интерфейс. Подробности о создании администратора — в статье «Как создать суперпользователя Django», а настройка списков, фильтров, инлайнов и действий — в полном руководстве по Django Admin.
Пользователи, вход и права
Приложение django.contrib.auth подключено в каждом новом проекте. Оно хранит пользователей и группы, хеширует пароли, проверяет права и даёт готовые view для входа, выхода и смены пароля. Закрыть страницу от анонимных посетителей можно одним декоратором:
from django.contrib.auth.decorators import login_required
@login_required
def profile(request):
...
Регистрация, своя модель пользователя и права доступа — в статье «Аутентификация в Django».
Django как бэкенд: REST API
Если фронтенд написан на JavaScript-фреймворке или есть мобильное приложение, Django выступает чистым бэкендом и отдаёт данные в JSON. Стандартный инструмент для этого — Django REST Framework (DRF): сериализаторы, ViewSet, роутеры, аутентификация по токенам и браузерная документация API. С него начинается работа с API на Django — см. руководство по Django REST Framework.
Деплой и фоновые задачи
runserver предназначен только для разработки. В продакшне Django-приложение запускают под сервером приложений (Gunicorn для WSGI, Uvicorn для ASGI) за веб-сервером Nginx, который раздаёт статику и терминирует HTTPS. Перед запуском собирают статику (collectstatic), выключают DEBUG и выносят секреты в переменные окружения. Пошаговая инструкция — в статье «Деплой Django: Gunicorn и Nginx».
Долгие операции — отправку писем, генерацию отчётов, обработку файлов — выносят в фоновые задачи, чаще всего на Celery.
Как создать сайт на Django: общий план
Создание сайта на Django обычно идёт в таком порядке:
- Установить Python и Django в виртуальное окружение.
- Создать проект (
startproject) и настроить язык, часовой пояс и базу данных. - Разбить функциональность на приложения (
startapp) и описать модели. - Выполнить миграции и настроить админку для наполнения контентом.
- Написать view, URL и шаблоны; вынести общий макет в базовый шаблон с наследованием
{% extends %}. - Подключить статику (CSS, JavaScript, изображения) и формы.
- Добавить пользователей: регистрацию, вход, права.
- Покрыть ключевую логику тестами: встроенный
python manage.py testили pytest-django. - Развернуть проект на сервере с Gunicorn и Nginx.
Весь путь от пустой папки до готового к деплою каталога с формой заявки показан в пошаговом руководстве по созданию сайта на Django. Отдельные пункты раскрыты в статьях раздела Django и кластера основ Django.
Как стать Django-разработчиком
Вакансии «Python/Django разработчик» и «бэкенд-разработчик на Django» обычно предполагают такой набор навыков:
- уверенный Python: ООП, исключения, генераторы, аннотации типов;
- Django: модели и ORM, миграции, class-based views, формы, админка, auth, middleware;
- Django REST Framework и проектирование REST API;
- PostgreSQL и SQL, понимание индексов и проблемы N+1 запросов;
- тестирование (unittest, pytest), Git, Docker;
- фоновые задачи (Celery, Redis), кеширование;
- деплой: Linux, Nginx, Gunicorn, переменные окружения, логирование.
Учиться эффективнее на своём проекте: блог, трекер задач, интернет-магазин с корзиной, API для мобильного приложения. Пет-проект на GitHub, развёрнутый на сервере, — сильный аргумент на собеседовании.
Маршрут изучения Django с нуля
| Этап | Что изучить | Статья |
|---|---|---|
| 1 | Установка Django, виртуальное окружение | Как установить Django |
| 2 | Проект, manage.py, settings.py, runserver | Как создать проект Django |
| 3 | Приложения, view, URL, шаблоны | Как создать приложение в Django |
| 4 | Модели, миграции, QuerySet | Шпаргалка по Django ORM |
| 5 | Админка и суперпользователь | Руководство по Django Admin |
| 6 | Пользователи, вход, права | Аутентификация в Django |
| 7 | Middleware и путь запроса | Django Middleware |
| 8 | REST API | Django REST Framework |
| 9 | Деплой в продакшн | Деплой Django: Gunicorn и Nginx |
Параллельно читайте официальную документацию Django — особенно пошаговый туториал и раздел «Topics». Где найти переводы на русский и как выбрать в документации нужную версию — в статье «Документация Django на русском».
Частые вопросы
Django — это язык программирования?
Нет. Django — фреймворк, а язык — Python. Чтобы писать на Django, нужно знать Python; HTML, CSS и SQL понадобятся на базовом уровне.
Как правильно: Django или Джанго?
Пишется Django, читается «джанго» — первая буква «D» не произносится, как и в имени гитариста Джанго Рейнхардта.
Сложно ли изучить Django с нуля?
Если вы уверенно владеете основами Python, первое работающее приложение получится за вечер, а уверенная работа с моделями, формами и админкой — за несколько недель практики. Сложнее всего новичкам даются ORM-запросы и путь запроса через URL, middleware и view — с них и стоит начинать углубление.
Нужно ли знать JavaScript?
Для сайтов с серверной отрисовкой — нет: страницы собираются шаблонами Django. Живой поиск, подгрузку списков и отправку форм без перезагрузки страницы можно сделать на HTMX с Django без своего JavaScript-кода. Полноценный JavaScript понадобится для сложного интерактивного интерфейса, а если фронтенд пишет отдельная команда, Django-разработчик отвечает за API.
Подходит ли Django для больших проектов?
Да. Фреймворк используют в крупных медиа, финтехе и SaaS-сервисах. Масштабируемость определяется архитектурой: оптимизацией запросов к базе, кешированием, фоновыми задачами и горизонтальным масштабированием серверов приложений.
Поддерживает ли Django асинхронность?
Да: Django работает под ASGI-серверами и поддерживает асинхронные view и middleware, а у ORM есть асинхронные методы вроде aget() и acount(). Для WebSocket используют пакет Django Channels.
Итог
Django — фреймворк для Python, который закрывает типовые задачи веб-разработки «из коробки»: ORM, админку, пользователей, формы и безопасность. Начните с установки Django, создайте проект и первое приложение, а затем по маршруту выше переходите к ORM, админке, API и деплою.
Все статьи по основам собраны в разделе «Django для начинающих».
- #Django
- #Python
- #Для начинающих
- #Веб-разработка
- #Backend