На этом занятии
мы сделаем первый практический шаг – выполним установку Django REST Framework. Этот пакет
устанавливается в проект сайта, работающего на Django. Поэтому
вначале нам нужно создать учебный сайт и начать с установки фреймворка Django.
Сначала я думал
взять уже готовый проект из предыдущего курса по Django, но потом
решил, что будет проще и понятнее, если мы создадим с нуля простое приложение
без каких-либо излишеств. Но за основу я возьму все тот же проект по знаменитым
женщинам.
Я сейчас не буду
подробно объяснять создание проекта сайта на Django, если вы этого
не знаете, то смотрите плейлист по этому фреймворку:
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xO_39zZll2u1lz_Q-Mwn1F
Вначале нам
нужно создать виртуальное окружение установить туда интерпретатор Python и фреймворк Django. Я все буду
делать непосредственно через PyCharm.
У меня уже
создана папка drf:
D:\Python\django\drf
в которую и буду
устанавливать виртуальное окружение. Для этого в PyCharm создаем новый
проект:
File
-> New Project
В поле «Location» прописываем «D:\Python\django\drf». Затем, отмечаем
пункт «New environment using» и прописываем путь
«D:\Python\django\drf\venv». Убираем галочку
«Create a main.py …» и нажимаем кнопку
«Create». У нас
начинается создание виртуального окружения.
Переходим во
вкладку «Terminal» и у нас здесь
должно быть уже активное виртуальное окружение (в круглых скобках прописано venv).
Находясь в
рабочем каталОге «D:\Python\django\drf» выполняем установку фреймворка Django:
pip install
django
После установки
создаем проект сайта на django с помощью команды:
django-admin
startproject drfsite
(здесь drfsite – название
проекта, обычно совпадает с доменным именем сайта).
У нас появится
каталОг drfsite с пакетом drfsite и набором
известных вам уже файлов. Перейдем в папку drfsite:
cd drfsite
И для проверки
работоспособности сайта выполним команду:
python manage.py
runserver
Если сайт
корректно отображается в браузере, значит, все было сделано верно.
Далее, выполним
миграции для создания таблиц в БД. В учебных целях я оставлю БД SQLite, чтобы не
перегружать материал. В дальнейшем к проекту достаточно просто можно подключить
любую другую СУБД. Итак, выполняем команду:
python manage.py
migrate
Затем, в файле drfsite/settings.py установим
русский язык для нашего сайта:
и поменяем временную
зону:
TIME_ZONE = 'Europe/Moscow'
Следующим шагом
создадим основное приложение сайта. Так как сайт посвящен известным женщинам,
то приложение я назвал women:
python manage.py startapp women
Прописываем наше
приложение в списке INSTALLED_APPS установленных
приложений (в файле drfsite/settings.py):
INSTALLED_APPS = [
...
'women.apps.WomenConfig',
]
Далее, нам нужны
будут модели для работы с таблицами БД. Я возьму классы моделей из курса по Django, где мы
создавали таблицу для хранения информации по женщинам, а также отдельную
таблицу category, которая
содержала категории женщин: певицы, актрисы, спортсменки и т.п.
В файле women/models.py, прописываем
следующие классы:
from django.db import models
class Women(models.Model):
title = models.CharField(max_length=255)
content = models.TextField(blank=True)
time_create = models.DateTimeField(auto_now_add=True)
time_update = models.DateTimeField(auto_now=True)
is_published = models.BooleanField(default=True)
cat = models.ForeignKey('Category', on_delete=models.PROTECT, null=True)
def __str__(self):
return self.title
class Category(models.Model):
name = models.CharField(max_length=100, db_index=True)
def __str__(self):
return self.name
Как видите, я
записываю все по минимуму. После определения классов моделей нам нужно создать
для них миграции:
python
manage.py makemigrations
и выполнить их:
python manage.py
migrate
Следующий шаг –
это создание суперюзера в нашем проекте, чтобы мы могли заходить в админ-панель
и добавлять информацию в наши таблицы. Для этого выполним команду:
python manage.py
createsuperuser
Здесь нам будет
предложено указать логин (имя пользователя). В учебных целях я укажу root. Далее, нужно
ввести адрес электронной почты, пусть это будет root@drfsite.ru. (Почта может
быть не существующей в учебном проекте, а вообще, нужно указывать адрес
реальной почты, на которую будут приходить служебные сообщения). И, наконец,
вводим пароль (1234) и повторяем его.
Все,
суперпользователь создан и мы теперь можем войти в админку, указав root и пароль 1234. Запускаем
тестовый веб-сервер:
python manage.py
runserver
Переходим по
адресу:
http://127.0.0.1:8000/admin/
Чтобы в
админ-панели появилось наше приложение Women его нужно
зарегистрировать. Для этого откроем файл women/admin.py, который
отвечает за взаимосвязь приложения с админкой, где мы будем регистрировать наши
модели. Вначале импортируем их:
и зарегистрируем
модель Women:
admin.site.register(Women)
Возвращаемся в
админку и при обновлении главной страницы видим наше приложение и
зарегистрированную модель Women. Если щелкнуть по ней, то видим список
наших записей и здесь же можем их редактировать, удалять и добавлять новые.
Однако сейчас у
нас нет ни одной категории. Чтобы сейчас не писать лишний код, я добавлю две
категории в таблицу Category с помощь программы
SQLiteStudio
Введем: 1 –
актрисы; 2 – певицы. Теперь мы можем выбирать одну из двух категорий. Добавим
несколько записей (берем заготовку).
Установка Django REST Framework
Все, наше
тестовый учебный проект готов и теперь мы можем приступить непосредственно к
установке Django REST Framework. Выполним
команду:
pip install djangorestframework
Далее, нам нужно
его зарегистрировать как приложение. Переходим в файл drfsite/settings.py и в коллекции INSTALLED_APPS прописываем
строчку:
INSTALLED_APPS = [
...
'rest_framework',
]
В принципе все,
пакет установлен и готов к работе. Чтобы увидеть его в действии нам в программе
нужно определить представление, которое будет срабатывать на запрос от
пользователя и сериализатор. Начнем с представления, которые мы с вами уже
много раз делали в проекте на Django. Здесь то же самое. Переходим в
файл women/views.py и записываем
следующий класс для DRF:
from rest_framework import generics
from .models import Women
class WomenAPIView(generics.ListAPIView):
queryset = Women.objects.all()
serializer_class = WomenSerializer
Наш класс WomenAPIView наследуется от базового
ListAPIView, который берется
из DRF и реализует функционал
по формированию JSON-списка из записей таблицы Women.
Чтобы
представление «знало» как формировать ответ, нужно определить класс
сериализатора WomenSerializer. Для этого
создадим еще один файл serializers.py в приложении women и определим
класс WomenSerializer:
from rest_framework import serializers
from .models import Women
class WomenSerializer(serializers.ModelSerializer):
class Meta:
model = Women
fields = ('title', 'cat_id')
Пока здесь вам
может быть далеко не все понятно. Мы обо всем подробно будем говорить на
последующих занятиях. Сейчас я просто показываю пример использования Django REST Framework не более того.
Последним шагом
нам нужно прописать маршрут для активации представления. Переходим в файл drfsite/urls.py и записываем:
from women.views import *
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/womenlist/', WomenAPIView.as_view()),
]
Все готово.
Давайте протестируем. Запускаем веб-сервер:
python
manage.py runserver
Переходим по адресу:
http://127.0.0.1:8000/api/v1/womenlist/
и видим ответ в
виде JSON-строки со
списком данных из таблицы Women:
Этот формат
вывод JSON ответа в
веб-браузере определен в пакете Django REST Framework для возможности
тестирования создаваемого API. Конечному устройству будет
передаваться только JSON-строка и заголовок ответа. Далее, приложение,
которое отправляло этот API-запрос, может выполнить парсинг
полученных данных и, например, отобразить их на экране смартфона. Так
происходит взаимодействие между сайтом и другими сторонними приложениями.
Из этого занятия
вам достаточно понять, как устанавливается Django REST Framework, а в качестве
практики, попробуйте повторить этот тестовый пример.