Django — что это такое и для чего нужно: обзор и установка фреймворка для Python, разработка первого проекта
Рассмотрим особенности, принцип работы, плюсы и минусы Django. Покажем, как установить фреймворк в виртуальное окружение, создать, настроить и запустить первый проект. Добро пожаловать на курс по изучению фреймворка Django с нуля. Мы начнем с самых простых вещей: все, что вам потребуется – базовые знания Python. Общее представление о HTML/CSS тоже пригодится, но если вы раньше не сталкивались с версткой – ничего страшного, разберемся. Это практический курс – после каждой главы мы будем разрабатывать проект. Сложность и функциональность учебных проектов будут нарастать постепенно: в ходе курса мы рассмотрим все аспекты фуллстек-разработки на Django, и сделаем несколько интересных приложений для вашего портфолио. Django – это мощный Python-фреймворк для разработки веб-приложений. Джанго предоставляет разработчикам огромный выбор готовых модулей, надстроек и инструментов, которые значительно ускоряют и упрощают процесс создания сложных, многофункциональных веб-приложений. Django часто включают в списки типа «лучшие CMS на основе Python» и разбирают в статьях вроде «Django vs WordPress: что лучше и что выбрать», из-за чего возникло заблуждение, что это некий аналог WordPress. Это не так: в отличие от WordPress, Django не является готовой и простой платформой-конструктором. Это именно фреймворк для разработки. Единственное, что у Django общего с WordPress – наличие админ-панели, которую при желании можно сделать похожей на wp-admin. Стоит заметить, что CMS на основе Django все-таки существуют, и в одной из глав курса мы их рассмотрим. 🐍 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» Интересно, перейти к каналу Фреймворк написан на Python и вся бэкенд-логика при разработке приложений тоже пишется на Python. Однако в шаблонах, как мы увидим позже, используются HTML, CSS, а при необходимости – JavaScript и его фреймворки. Фреймворк славится своими «батарейками» – это те самые готовые модули и надстройки, которые сильно упрощают работу. В Django таких модулей много – панель администрирования, аутентификация и авторизация, формы с автоматической валидацией данных, встроенный сервер и так далее. Среди других плюсов фреймворка: У фреймворка есть и несколько незначительных минусов: Фреймворк основан на архитектурном принципе MVT (Model-View-Template, модель – представление – шаблон). В соответствии с этим подходом код приложения делится на данные (модели), логику (представления) и пользовательский интерфейс (шаблоны): Проще всего продемонстрировать логику работы Django на конкретном примере, так что установим фреймворк, а затем разберемся со структурой и настройками проекта. Статья по теме 🐍🚀 Django с нуля. Часть 1: пишем многопользовательский блог для клуба любителей задач Python Django лучше всего устанавливать в виртуальное окружение. Это позволяет: Для создания виртуального окружения выполните в командной строке: Эта команда создает папку myproject в вашей рабочей директории; внутри myproject находится поддиректория venv – в ней расположены файлы виртуального окружения. Перейдите в myproject и активируйте виртуальную среду: Когда окружение активировано, перед адресом рабочей директории отображается Чтобы выйти из виртуальной среды, выполните команду Для активации окружения перед каждым сеансом работы с проектом нужно переходить в директорию проекта и выполнять С активированным виртуальным окружением выполните команду: Установка происходит автоматически и занимает несколько секунд. После окончания установки можно приступать к созданию проекта Django. Работа над чем бы то ни было в Django всегда начинается одинаково – с создания проекта: Обратите внимание на точку в конце команды и название config: Как только проект создан, его можно запустить с помощью команды: Перейдите по адресу http://localhost:8000/ на стартовую страницу Django: Структура проекта сейчас выглядит так: Для остановки сервера используют комбинацию Ctrl+C. Чтобы избежать путаницы, стоит запомнить, что любое веб-приложение (например, сайт) в терминологии Django считается проектом, а приложения внутри проекта, в свою очередь, соответствуют секциям или модулям готового сайта. Например, сайт (проект config) может включать в себя сколько угодно разделов (джанговских приложений): blog, forum, news, portfolio. Простой проект может состоять из одного приложения, сложный – из множества. Назовем наше первое приложение firstapp: Файл manage.py отвечает за управление проектом, с него начинается любая командная конструкция в Django. После создания firstapp структура проекта должна выглядеть так: Статья по теме 🐍🚀 Пишем гибридное приложение для хранения заметок на Django, Django Ninja REST Framework и Alpine.js Чтобы Django мог использовать приложение в проекте, это приложение нужно установить (зарегистрировать) в главном файле настроек. Откройте файл config/settings.py и добавьте название приложения в первую строку секции INSTALLED_APPS: config/settings.py Иногда разработчики указывают краткое название приложения, то есть просто firstapp, но хорошей практикой считается регистрация полного названия, в нашем случае это firstapp.apps.FirstappConfig. Полное название можно узнать в файле firstapp/apps.py – это имя класса: firstapp/apps.py Если запустить сервер сейчас, в директории проекта появится пустой файл базы данных db.sqlite3, а в командной строке будет висеть напоминание о миграциях, которыми мы займемся позже: Вся логика (нашего первого и любого другого) приложения всегда располагается в файле views.py. Откройте файл firstapp/views.py и сохраните в нем следующий код: firstapp/views.py Теперь нужно создать шаблон index.html, в который передается приветствие. Для этого нужно создать папку templates в директории firstapp, и сохранить в ней index.html со следующим содержимым: firstapp/templates/index.html Конструкция из двойных фигурных скобок Логику, описанную в файле views.py, приводит в действие маршрут. Маршруты хранятся в файле urls.py – этот файл, в отличие от views.py, не создается автоматически. Вам нужно создать его вручную. Сохраните этот маршрут в firstapp/urls.py: firstapp/urls.py Чтобы маршруты приложения были видны на уровне проекта, нужно их добавить в список маршрутов проекта. Для этого используется файл urls.py в папке проекта. Откройте config/urls.py и сохраните в нем этот код: config/urls.py И вот теперь, наконец, можно запустить сервер На первый взгляд, взаимодействие всех этих файлов кажется сложным (и это у нас еще нет базы данных!) Но, на самом деле, алгоритм работы Django очень прост: Чтобы получить доступ к админке, надо создать аккаунт суперпользователя (администратора). А поскольку учетные данные хранятся в базе данных, нужно применить к ней соответствующие миграции – то есть создать таблицу для хранения информации о пользователях: Результат выполнения этой команды выглядит примерно так: Подробнее миграции мы рассмотрим позже, а пока просто создадим учетную запись администратора: В ходе создания учетной записи необходимо ввести имя пользователя (логин), пароль и подтверждение пароля. Адрес email – опционален, его можно пропустить. Символы пароля во время ввода не отображаются – ни явно, ни в замаскированном точками Вот теперь, наконец, можно запустить сервер Язык админки по умолчанию – английский, а время создания записей определяется в соответствии с UTC. Однако изменить язык на русский, а время – на московское очень просто. Откройте файл config/settings.py и замените эти параметры: config/settings.py На эти: config/settings.py Перезагрузите страницу – теперь все данные выводятся на русском: Чтобы изменить надписи «Администрирование Django» и «Администрирование сайта» на название собственного проекта, добавьте эти параметры в файл firstapp/admin.py: firstapp/admin.py Результат: Все дополнительные модули необходимо устанавливать в активированное виртуальное окружение проекта, иначе Django не сможет получить к ним доступ. Установим, к примеру, модуль openpyxl, который используется для работы с файлами Excel: Некоторые модули выступают в качестве приложений, и их необходимо устанавливать в Напишем две функции – read_movies_from_excel(), которая извлекает данные о лучших фильмax из файла firstapp/files/movies.xlsx, и представление movies_view для вывода информации в шаблон index.html. В этот раз для указания пути к файлу мы воспользуемся средствами Python, а в следующей части покажем, как использовать для таких целей папку media. Так будет выглядеть код для firstapp/views.py: firstapp/views.py Как уже упоминалось выше, логика запускается при помощи маршрута. Изменим файл firstapp/urls.py так, чтобы при переходе на http://localhost:8000/ запускалось извлечение данных о фильмах из файла movies.xlsx: firstapp/urls.py Поскольку данные о фильмах передаются с бэкенда на фронтенд при помощи шаблона index.html, внесем нужные изменения в его код: index.html Как видно по этому коду, синтаксис шаблонизатора Django для вывода данных в цикле Все готово, можно запускать сервер и открывать главную страницу приложения: Если что-то не работает – сверьтесь с кодом проекта. Команда После чего в корневой директории появится файл requirements.txt, в котором перечислены все модули, установленные в окружении на данный момент. В нашем случае список зависимостей выглядит так: Файл requirements.txt нужен для автоматической установки всех нужных модулей и библиотек, которые использует приложение. К примеру, если содержимое файла аналогично приведенному выше, то эта команда обеспечит установку конкретной версии Django (4.2.3) и модуля openpyxl: Теперь вы знаете, как создать виртуальное окружение и установить туда Django вместе с любыми нужными модулями. Мы обсудили принцип работы фреймворка и взаимосвязь между маршрутами, представлениями и шаблонами. На следующем этапе мы углубимся в тему работы с различными типами файлов и разработаем приложение для хранения информации о книгах.Обзор фреймворка Django. Особенности, преимущества и недостатки
Что такое Django
Язык программирования Django
Преимущества Django
Недостатки Django
Как работает Django
Установка Django и создание первого проекта
Установка виртуальной среды
python -m venv myprojectvenv
cd myproject venvscriptsactivate
(venv)
:
(venv) C:UsersUsermyproject>
deactivate
:
(venv) C:UsersUsermyproject>deactivate
venvscriptsactivate
.Как установить Django
pip install django
Структура и настройки Django проекта
django-admin startproject config .
.
, все содержимое проекта будет вложено в еще одну папку.
manage.py runserver
|-- config/ |-- asgi.py |-- settings.py |-- urls.py |-- wsgi.py |-- __init__.py |-- __pycache__/ |-- venv/ |-- manage.py
Как создать приложение Django
manage.py startapp 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
INSTALLED_APPS = [ 'firstapp.apps.FirstappConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
class FirstappConfig(AppConfig)
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
from django.shortcuts import render def hello_world(request): return render(request, 'index.html', {'greeting': 'Hello, world!'})
<!DOCTYPE html> <html> <head> <title>Мое первое Django-приложение</title> </head> <body> <h1>{{ greeting }}</h1> </body> </html>
{{ greeting }}
называется тегом. Теги являются частью специального языка шаблонизатора Django. Они используются для вставки логики и выполнения операций в шаблонах. Подробнее мы разберем теги в соответствующей главе, посвященной шаблонам.
from django.urls import path from . import views urlpatterns = [ path('', hello_world, name='hello_world'), ]
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/ и увидеть приветствие:Принцип работы приложения Джанго
Создание аккаунта суперпользователя
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
........
виде, это нормально:
Username (leave blank to use 'user'): Admin Email address: Password: Password (again): Superuser created successfully.
manage.py runserver
и войти в админку Django по адресу http://localhost:8000/admin/:Админ-панель и ее настройки
LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC'
LANGUAGE_CODE = 'ru' TIME_ZONE = 'Europe/Moscow'
admin.site.site_header = "Мой проект" admin.site.site_title = "Мой первый проект" admin.site.index_title = "Добро пожаловать в Мой проект"
Установка дополнительных модулей в Django
pip install openpyxl
INSTALLED_APPS
settings.py, но openpyxl будет работать и без установки.
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})
from django.urls import path from .views import movies_view urlpatterns = [ path('', movies_view, name='movies_view'), ]
<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 %}
for
очень похож на обычный Python, за исключением того, что в шаблонах необходимо явно указывать точку завершения цикла {% endfor %}
.Создание списка зависимостей requirments.txt в Django
freeze
позволяет автоматически создать requirements.txt, в котором будут перечислены названия и версии всех модулей, библиотек и фреймворков, установленных в виртуальном окружении. Выполните:
pip freeze > 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
pip install -r requirements.txt
Подведем итоги
- 0 views
- 0 Comment