Этот курс состоит из двух видов практик. Одна выполняется в редакторе Хекслета, другая — на собственном компьютере. Второй вид практики предполагает наличие настроенного 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
— здесь находятся тесты для приложения, их состав вы тоже будете пополнятьЛучший способ "поиграться" с кодом данного проекта — использовать shell_plus. У Django есть встроенная команда "shell", shell_plus из пакета django-extensions всего лишь делает её удобнее. В данном проекте в Makefile уже заведена соответствующая команда для запуска, можете смело выполнить make shell
.
make shell
# Shell Plus Model Imports
from python_django_orm_blog.blog.models import Post, PostComment, PostLike, Tag, User
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When
from django.utils import timezone
from django.urls import reverse
from django.db.models import Exists, OuterRef, Subquery
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
После запуска вы увидите привычный Python REPL, но при этом база данных окажется подключена и все модели из каждого приложения уже будут импортированы. Заодно shell_plus импортирует и большую часть инструментов из состава фреймворка. Таким образом вы сможете сразу начать работать с БД, а shell отобразит каждый SQL-запрос, который сформирует ORM — это очень удобно при отладке и оптимизации работы с базой данных.
>>> # создадим нового пользователя
>>> 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: User object (1)>
>>> # переменная _ хранит результат работы предыдущей команды
>>> _.email = 'jsmith@gmail.com' # зададим пользователю email
>>> _.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
.Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт