Установка Django Rest Framework

На этом занятии мы сделаем первый практический шаг – выполним установку 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 установим русский язык для нашего сайта:

LANGUAGE_CODE = 'ru'

и поменяем временную зону:

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, который отвечает за взаимосвязь приложения с админкой, где мы будем регистрировать наши модели. Вначале импортируем их:

from .models import *

и зарегистрируем модель 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. Для этого создадим еще один файл seralizers.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, а в качестве практики, попробуйте повторить этот тестовый пример.