Хочешь уверенно проходить IT-интервью?
![Готовься к IT-собеседованиям уверенно с AI-тренажёром T1!](https://media.proglib.io/banner/2025/01/28/t1.jpg)
Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще.
💡 Почему Т1 тренажёр — это мастхэв?
- Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
- Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!".
- Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях.
Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!
Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy
Добро пожаловать на курс по изучению фреймворка Django с нуля. Мы начнем с самых простых вещей: все, что вам потребуется – базовые знания Python. Общее представление о HTML/CSS тоже пригодится, но если вы раньше не сталкивались с версткой – ничего страшного, разберемся.
Это практический курс – после каждой главы мы будем разрабатывать проект. Сложность и функциональность учебных проектов будут нарастать постепенно: в ходе курса мы рассмотрим все аспекты фуллстек-разработки на Django, и сделаем несколько интересных приложений для вашего портфолио.
Обзор фреймворка Django. Особенности, преимущества и недостатки
Что такое Django
Django – это мощный Python-фреймворк для разработки веб-приложений. Джанго предоставляет разработчикам огромный выбор готовых модулей, надстроек и инструментов, которые значительно ускоряют и упрощают процесс создания сложных, многофункциональных веб-приложений.
Django часто включают в списки типа «лучшие CMS на основе Python» и разбирают в статьях вроде «Django vs Wordpress: что лучше и что выбрать», из-за чего возникло заблуждение, что это некий аналог WordPress. Это не так: в отличие от WordPress, Django не является готовой и простой платформой-конструктором. Это именно фреймворк для разработки. Единственное, что у Django общего с Wordpress – наличие админ-панели, которую при желании можно сделать похожей на wp-admin. Стоит заметить, что CMS на основе Django все-таки существуют, и в одной из глав курса мы их рассмотрим.
Язык программирования Django
Фреймворк написан на Python и вся бэкенд-логика при разработке приложений тоже пишется на Python. Однако в шаблонах, как мы увидим позже, используются HTML, CSS, а при необходимости – JavaScript и его фреймворки.
Преимущества Django
Фреймворк славится своими «батарейками» – это те самые готовые модули и надстройки, которые сильно упрощают работу. В Django таких модулей много – панель администрирования, аутентификация и авторизация, формы с автоматической валидацией данных, встроенный сервер и так далее. Среди других плюсов фреймворка:
- Универсальность. Существует огромное количество дополнительных модулей, которые позволяют реализовать на Django приложение с любой функциональностью и для любой сферы.
- ORM – удобная прослойка для работы с базой данных, которая избавляет разработчика от необходимости писать запросы на языке SQL. Мы подробно разберем ORM в главе, посвященной работе с базами данных.
- Оптимизация производительности. Встроенные механизмы кэширования, обработка статических файлов и оптимизация запросов позволяют настроить Django приложение на максимальную производительность.
- Простота интеграции. Фреймворк без труда можно интегрировать с чем угодно – от блога на WordPress до GraphQL. Фронтенд для Django приложения можно сделать на любом JavaScript фреймворке – передачу данных с бэкенда на фронт и обратно можно реализовать даже без API. В бэкенде многих высоконагруженных платформ Python и Django используются совместно с другими языками программирования.
- Гибкость. На Django можно делать фуллстек-приложения, в которых вывод данных и все манипуляции с ними на фронтендe обеспечиваются средствами самого фреймворка. Но можно делать и гибридные приложения, в которых обработка данных разделена между некоторыми модулями Django и JavaScript фронтендом. А еще можно делать на Django (и Django REST Framework) только бэкенд и API, предоставляя всю свободу действий фронтенду.
- Безопасность. Фреймворк имеет надежную встроенную защиту от внедрения SQL-кода, подделки межсайтовых запросов и межсайтового скриптинга.
- Скорость разработки. Процесс разработки приложений на этом фреймворке занимает меньше времени, чем при использовании других платформ – благодаря первоклассной документации и огромному количеству готовых модулей.
Недостатки Django
У фреймворка есть и несколько незначительных минусов:
- Жесткая архитектура проекта. На первом этапе изучения структура Django проекта может показаться сложной, а изменить ее по собственному усмотрению (как в случае с Flask) нельзя. Однако у жесткой архитектуры есть и свои плюсы – она обеспечивает четкую, понятную структуру проекта и простоту переиспользования всех приложений. К примеру, если вы разработаете модуль блога или форума, его можно будет запросто перенести в любой другой Django проект.
- Недостаточная производительность для высоконагруженных приложений. Оптимизация производительности, которую мы отметили в преимуществах фреймворка, имеет свои пределы. На Django нельзя сделать аналог гигантского маркетплейса типа Amazon. Для менее масштабных (но высоконагруженных) приложений фреймворк в «чистом» виде тоже не подходит – оптимальнее сделать бэкенд на Django и API на Django REST Framework, чтобы использовать их с фронтендом на React или Angular. Однако для абсолютного большинства веб-приложений с умеренной нагрузкой Django подходит прекрасно.
- Синхронный принцип работы. Django работает синхронно – каждый запрос блокирует выполнение других запросов до его завершения. Это может привести к проблемам с обработкой большого числа одновременных запросов. Для создания приложений, которые обрабатывают огромное количество запросов и ответов в реальном времени, нужно использовать асинхронные решения на основе веб-сокетов, например Django Channels. Для менее требовательных приложений, которые все же должны принимать запросы от большого числа пользователей и отвечать на них по мере готовности результатов на бэкенде, можно использовать асинхронные представления asyncio. Asyncio позволяет создавать асинхронный код для параллельной обработки запросов и выполнения длительных операций без блокирования других запросов.
Как работает Django
Фреймворк основан на архитектурном принципе MVT (Model-View-Template, модель – представление – шаблон). В соответствии с этим подходом код приложения делится на данные (модели), логику (представления) и пользовательский интерфейс (шаблоны):
- Модель (Model) определяет структуру хранения данных в базе. Django использует ORM (Object-Relational Mapping, объектно-реляционное отображение) для создания виртуальной объектной базы данных. Это позволяет разработчикам взаимодействовать с БД с помощью привычных и удобных объектов и методов, без прямого использования SQL-запросов.
- Представление (View) обрабатывает запросы пользователей и формирует ответ. Представление принимает данные из модели, обрабатывает их и передает в шаблон (template) для отображения.
- Шаблон (Template) является частью представления и определяет, как данные будут отображаться на веб-странице. Шаблонизатор Django использует свой собственный язык шаблонов, который очень похож на Python. Этот язык позволяет проводить любые операции с данными во время загрузки HTML-страницы.
Проще всего продемонстрировать логику работы Django на конкретном примере, так что установим фреймворк, а затем разберемся со структурой и настройками проекта.
Установка Django и создание первого проекта
Установка виртуальной среды
Django лучше всего устанавливать в виртуальное окружение. Это позволяет:
- изолировать проекты друг от друга;
- использовать нужные версии Python и дополнительных модулей;
- избегать конфликтов;
- автоматически создавать список зависимостей (requirements.txt).
Для создания виртуального окружения выполните в командной строке:
python -m venv myproject\venv
Эта команда создает папку myproject в вашей рабочей директории; внутри myproject находится поддиректория venv – в ней расположены файлы виртуального окружения. Перейдите в myproject и активируйте виртуальную среду:
cd myproject
venv\scripts\activate
Когда окружение активировано, перед адресом рабочей директории отображается (venv)
:
(venv) C:\Users\User\myproject>
Чтобы выйти из виртуальной среды, выполните команду deactivate
:
(venv) C:\Users\User\myproject>deactivate
Для активации окружения перед каждым сеансом работы с
проектом нужно переходить в директорию проекта и выполнять venv\scripts\activate
.
Как установить Django
С активированным виртуальным окружением выполните команду:
pip install django
Установка происходит автоматически и занимает несколько секунд. После окончания установки можно приступать к созданию проекта Django.
Структура и настройки Django проекта
Работа над чем бы то ни было в Django всегда начинается одинаково – с создания проекта:
django-admin startproject config .
Обратите внимание на точку в конце команды и название config:
- Точка обеспечивает более удобную структуру проекта – если выполнить команду без
.
, все содержимое проекта будет вложено в еще одну папку. - Название проекта может быть любым, например mysite, если вы собираетесь разрабатывать сайт. Но удобнее всего использовать что-то вроде config, поскольку в этой папке хранятся общие настройки проекта.
Как только проект создан, его можно запустить с помощью команды:
manage.py runserver
Перейдите по адресу http://localhost:8000/ на стартовую страницу Django:
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/5bb495dd92b3b31f7a0803be6352abeb.png)
Структура проекта сейчас выглядит так:
|-- config/
|-- asgi.py
|-- settings.py
|-- urls.py
|-- wsgi.py
|-- __init__.py
|-- __pycache__/
|-- venv/
|-- manage.py
Для остановки сервера используют комбинацию Ctrl+C.
Как создать приложение Django
Чтобы избежать путаницы, стоит запомнить, что любое веб-приложение (например, сайт) в терминологии Django считается проектом, а приложения внутри проекта, в свою очередь, соответствуют секциям или модулям готового сайта. Например, сайт (проект config) может включать в себя сколько угодно разделов (джанговских приложений): blog, forum, news, portfolio. Простой проект может состоять из одного приложения, сложный – из множества.
Назовем наше первое приложение firstapp:
manage.py startapp firstapp
Файл manage.py отвечает за управление проектом, с него начинается любая командная конструкция в Django. После создания firstapp структура проекта должна выглядеть так:
|-- config/
|-- asgi.py
|-- settings.py
|-- urls.py
|-- wsgi.py
|-- __init__.py
|-- __pycache__/
|-- firstapp/
|-- admin.py
|-- apps.py
|-- migrations/
|-- __init__.py
|-- models.py
|-- tests.py
|-- views.py
|-- __init__.py
|-- venv/
|-- manage.py
Установка приложения в settings.py
Чтобы Django мог использовать приложение в проекте, это приложение нужно установить (зарегистрировать) в главном файле настроек. Откройте файл config/settings.py и добавьте название приложения в первую строку секции INSTALLED_APPS:
INSTALLED_APPS = [
'firstapp.apps.FirstappConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Иногда разработчики указывают краткое название приложения, то есть просто firstapp, но хорошей практикой считается регистрация полного названия, в нашем случае это firstapp.apps.FirstappConfig. Полное название можно узнать в файле firstapp/apps.py – это имя класса:
class FirstappConfig(AppConfig)
Если запустить сервер сейчас, в директории проекта появится пустой файл базы данных db.sqlite3, а в командной строке будет висеть напоминание о миграциях, которыми мы займемся позже:
You have 18 unapplied migration(s). Your project may not work properly until you
apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
Логика приложения Django
Вся логика (нашего первого и любого другого) приложения всегда располагается в файле views.py. Откройте файл firstapp/views.py и сохраните в нем следующий код:
from django.shortcuts import render
def hello_world(request):
return render(request, 'index.html', {'greeting': 'Hello, world!'})
Теперь нужно создать шаблон index.html, в который передается приветствие. Для этого нужно создать папку templates в директории firstapp, и сохранить в ней index.html со следующим содержимым:
<!DOCTYPE html>
<html>
<head>
<title>Мое первое Django-приложение</title>
</head>
<body>
<h1>{{ greeting }}</h1>
</body>
</html>
Конструкция из двойных фигурных скобок {{ greeting }}
называется тегом. Теги являются частью специального языка шаблонизатора Django. Они используются для вставки логики и выполнения операций в шаблонах. Подробнее мы разберем теги в соответствующей главе, посвященной шаблонам.
Логику, описанную в файле views.py, приводит в действие маршрут. Маршруты хранятся в файле urls.py – этот файл, в отличие от views.py, не создается автоматически. Вам нужно создать его вручную. Сохраните этот маршрут в firstapp/urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.hello_world, name='hello_world'),
]
Чтобы маршруты приложения были видны на уровне проекта, нужно их добавить в список маршрутов проекта. Для этого используется файл urls.py в папке проекта. Откройте config/urls.py и сохраните в нем этот код:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('firstapp.urls')),
]
И вот теперь, наконец, можно запустить сервер manage.py runserver
, перейти на http://localhost:8000/ и увидеть приветствие:
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/3f4efe8a2a0cc56cea2b4172e6b6484e.png)
Принцип работы приложения Джанго
На первый взгляд, взаимодействие всех этих файлов кажется сложным (и это у нас еще нет базы данных!) Но, на самом деле, алгоритм работы Django очень прост:
- Пользователь переходит по определенному маршруту (открывает URL в браузере).
- Маршрут, поскольку он связан с определенной функцией в urls.py, запускает нужную функцию в views.py.
- При наличии базы данных, либо при необходимости использовать информацию из файла (как мы это увидим позже) функция запросит нужные данные, произведет какие-то действия, и отправит полученный результат в шаблон.
Создание аккаунта суперпользователя
Чтобы получить доступ к админке, надо создать аккаунт суперпользователя (администратора). А поскольку учетные данные хранятся в базе данных, нужно применить к ней соответствующие миграции – то есть создать таблицу для хранения информации о пользователях:
manage.py migrate
Результат выполнения этой команды выглядит примерно так:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
Подробнее миграции мы рассмотрим позже, а пока просто создадим учетную запись администратора:
manage.py createsuperuser
В ходе создания учетной записи необходимо ввести имя
пользователя (логин), пароль и подтверждение пароля. Адрес email –
опционален, его можно пропустить. Символы пароля во время ввода не отображаются
– ни явно, ни в замаскированном точками ........
виде, это нормально:
Username (leave blank to use 'user'): Admin
Email address:
Password:
Password (again):
Superuser created successfully.
Вот теперь, наконец, можно запустить сервер manage.py runserver
и войти в админку Django по адресу http://localhost:8000/admin/:
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/d001c535ac9768d2ee631324fedf2aa5.png)
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/4eb75b9b2a55e75fe0e3bb19680f70ea.png)
Админ-панель и ее настройки
Язык админки по умолчанию – английский, а время создания записей определяется в соответствии с UTC. Однако изменить язык на русский, а время – на московское очень просто. Откройте файл config/settings.py и замените эти параметры:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
На эти:
LANGUAGE_CODE = 'ru'
TIME_ZONE = 'Europe/Moscow'
Перезагрузите страницу – теперь все данные выводятся на русском:
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/b5e23c72b2653c2438360e742c94b7eb.png)
Чтобы изменить надписи «Администрирование Django» и «Администрирование сайта» на название собственного проекта, добавьте эти параметры в файл firstapp/admin.py:
admin.site.site_header = "Мой проект"
admin.site.site_title = "Мой первый проект"
admin.site.index_title = "Добро пожаловать в Мой проект"
Результат:
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/52ef7db6742cab417a89a4be7cf01327.png)
Установка дополнительных модулей в Django
Все дополнительные модули необходимо устанавливать в активированное виртуальное окружение проекта, иначе Django не сможет получить к ним доступ. Установим, к примеру, модуль openpyxl, который используется для работы с файлами Excel:
pip install openpyxl
Некоторые модули выступают в качестве приложений, и их необходимо устанавливать в INSTALLED_APPS
settings.py, но openpyxl будет работать и без установки.
Напишем две функции – read_movies_from_excel(), которая извлекает данные о лучших фильмax из файла firstapp/files/movies.xlsx, и представление movies_view для вывода информации в шаблон index.html. В этот раз для указания пути к файлу мы воспользуемся средствами Python, а в следующей части покажем, как использовать для таких целей папку media. Так будет выглядеть код для firstapp/views.py:
import os
from django.shortcuts import render
from openpyxl import load_workbook
def read_movies_from_excel(file_path):
movies = []
workbook = load_workbook(filename=file_path)
sheet = workbook.active
for row in sheet.iter_rows(min_row=2, values_only=True):
title, year, director, genre = row
movie = {
'title': title,
'year': int(year),
'director': director,
'genre': genre
}
movies.append(movie)
return movies
def movies_view(request):
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'files/movies.xlsx')
movies = read_movies_from_excel(file_path)
return render(request, 'index.html', {'movies': movies})
Как уже упоминалось выше, логика запускается при помощи маршрута. Изменим файл firstapp/urls.py так, чтобы при переходе на http://localhost:8000/ запускалось извлечение данных о фильмах из файла movies.xlsx:
from django.urls import path
from .views import movies_view
urlpatterns = [
path('', movies_view, name='movies_view'),
]
Поскольку данные о фильмах передаются с бэкенда на фронтенд при помощи шаблона index.html, внесем нужные изменения в его код:
<h1>Топ-250 лучших фильмов</h1>
{% for movie in movies %}
<div>
<h2>{{ movie.title }}</h2>
<p>Год выпуска: {{ movie.year }}</p>
<p>Режиссер: {{ movie.director }}</p>
<p>Жанр: {{ movie.genre }}</p>
</div>
{% endfor %}
Как видно по этому коду, синтаксис шаблонизатора Django для
вывода данных в цикле for
очень похож на обычный Python, за исключением того, что в шаблонах необходимо явно
указывать точку завершения цикла {% endfor %}
.
Все готово, можно запускать сервер и открывать главную страницу приложения:
![🐍🎸 Курс Django. Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта](https://media.proglib.io/posts/2023/07/24/4a18029ea7d7d569e59c5f583695e687.png)
Если что-то не работает – сверьтесь с кодом проекта.
Создание списка зависимостей requirments.txt в Django
Команда freeze
позволяет автоматически создать requirements.txt, в котором будут перечислены названия и версии всех модулей, библиотек и фреймворков, установленных в виртуальном окружении. Выполните:
pip freeze > requirements.txt
После чего в корневой директории появится файл requirements.txt, в котором перечислены все модули, установленные в окружении на данный момент. В нашем случае список зависимостей выглядит так:
asgiref==3.7.2
backports.zoneinfo==0.2.1
Django==4.2.3
et-xmlfile==1.1.0
openpyxl==3.1.2
sqlparse==0.4.4
typing-extensions==4.7.1
tzdata==2023.3
Файл requirements.txt нужен для автоматической установки всех нужных модулей и библиотек, которые использует приложение. К примеру, если содержимое файла аналогично приведенному выше, то эта команда обеспечит установку конкретной версии Django (4.2.3) и модуля openpyxl:
pip install -r requirements.txt
Подведем итоги
Теперь вы знаете, как создать виртуальное окружение и установить туда Django вместе с любыми нужными модулями. Мы обсудили принцип работы фреймворка и взаимосвязь между маршрутами, представлениями и шаблонами. На следующем этапе мы углубимся в тему работы с различными типами файлов и разработаем приложение для хранения информации о книгах.
Содержание курса
- Часть 1: Django — что это? Обзор и установка фреймворка, структура проекта
- Проект 1: Веб-приложение на основе XLSX вместо базы данных
- Часть 2: ORM и основы работы с базами данных
- Проект 2: Портфолио разработчика
Комментарии