Этот курс состоит из двух видов практик. Одна выполняется в редакторе Хекслета, другая — на собственном компьютере. Второй вид практики предполагает наличие настроенного Django-проекта, поскольку Django ORM является неотделимой частью фреймворка Django. Мы подготовили такой проект заранее. Вам будет необходимо склонировать к себе готовый репозиторий и проверить его работоспособность:
git clone https://github.com/hexlet-components/python-django-orm-blog
cd python-django-orm-blog
make setup # первоначальная настройка
make test # запуск тестов
# тут вы увидите результат запуска тестов
========= ...
.............
... ====== 1 passed ...
В качестве базы данных в этом проекте используется SQLite. Такой выбор никак не влияет на работу с ORM, но значительно упрощает настройку и запуск кода на выполнение. SQLite в отличие от больших СУБД, хранится в одном файле и работает напрямую из кода. Под неё не поднимается отдельное приложение в системе.
Основные части репозитория
В целом проект устроен примерно так же, как было описано в курсе по введению в Django. Ниже перечислены те части репозитория, которые касаются практик к данному курсу:
Makefile
— набор команд для работы с проектомpython_django_orm_blog/
— Python package, являющийся Django-проектомpython_django_orm_blog/settings.py
— настройки Django-проектаpython_django_orm_blog/blog
— единственное Django-приложение в рамках проектаpython_django_orm_blog/blog/models.py
— здесь описаны модели приложения, с ними и предстоит работатьpython_django_orm_blog/blog/tests.py
— здесь находятся тесты для приложения, их состав вы тоже будете пополнять
REPL (Django shell)
Лучший способ "поиграться" с кодом данного проекта — использовать shell_plus. У Django есть встроенная команда "shell", shell_plus из пакета django-extensions всего лишь делает её удобнее. В данном проекте в Makefile уже заведена соответствующая команда для запуска, можете смело выполнить make shell
.
После запуска вы увидите привычный Python REPL, но при этом база данных окажется подключена и все модели из каждого приложения уже будут импортированы. Заодно shell_plus импортирует и большую часть инструментов из состава фреймворка. Таким образом вы сможете сразу начать работать с БД, а shell отобразит каждый SQL-запрос, который сформирует ORM — это очень удобно при отладке и оптимизации работы с базой данных.
# создадим нового пользователя
user = User.objects.create(first_name='John', last_name='Smith')
# INSERT INTO "blog_user" ("created_at", "updated_at", "email", "first_name", "last_name")
# VALUES ('2021-06-30 08:38:27.250505', '2021-06-30 08:38:27.250753', '', 'John', 'Smith')
# Execution time: 0.007545s [Database: default]
user.email = 'jsmith@gmail.com' # зададим пользователю email
user.save() # сохраним изменения
# UPDATE "blog_user"
# SET "created_at" = '2021-06-30 08:38:27.250505',
# "updated_at" = '2021-06-30 08:40:44.948264',
# "email" = 'jsmith@gmail.com',
# "first_name" = 'John',
# "last_name" = 'Smith'
# WHERE "blog_user"."id" = 1
#
# Execution time: 0.009978s [Database: default]
В последующих уроках будет много примеров кода. Не забывайте запускать REPL и выполнять примеры в нём. Это поможет лучше разобраться с материалом и закрепить его на практике.
Самостоятельная работа
- Выполните шаги указанные в уроке.
- Познакомьтесь с кодом
Makefile
и настройками Django в файлеsettings.py
.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.