Django 5 для начинающих

Прогресс по курсу:  9/1004

8.4 Представления
3 из 4 шагов пройдено
0 из 5 баллов  получено

В прошлых шагах мы рассмотрели работу представлений на основе класса APIView и на основе миксинов, но разработчики Django REST Framework упростили определения классов представлений.

В DRF существует несколько предопределенных базовых классов, о которых подробно можно почитать на следующей странице официальной документации:

  • CreateAPIView – создание данных по POST-запросу;
  • ListAPIView – чтение списка данных по GET-запросу;
  • RetrieveAPIView – чтение конкретных данных (записи) по GET-запросу;
  • DestroyAPIView – удаление данных (записи) по DELETE-запросу;
  • UpdateAPIView – изменение записи по PUT или PATCH-запросу;
  • ListCreateAPIView – для чтения (по GET-запросу) и создания списка данных (по POST-запросу);
  • RetrieveUpdateAPIView – чтение и изменение отдельной записи (GET, PUT и PATCH-запросы);
  • RetrieveDestroyAPIView – чтение (GET-запрос) и удаление (DELETE-запрос) отдельной записи;
  • RetrieveUpdateDestroyAPIView – чтение, изменение и добавление отдельной записи (GET, PUT, PATCH и DELETE-запросы).

Чтобы использовать общие представления на основе классов, классы представлений должны импортироваться из rest_framework.generics.

А теперь давайте переделаем представления списка и детальной информации, чтобы извлекать объекты Post. Внутри каталога /blog_api/ откройте views.py. Добавьте в него следующий ниже исходный код:

from rest_framework import generics
from blog.models import Post
from .serializers import PostSerializer

class PostList(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer


class PostDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

В приведенном выше исходном коде используются типовые представления ListCreateAPIView и RetrieveUpdateDestroyAPIView фреймворка REST. URL-параметр pk вставлен в представление детальной информации, чтобы извлекать объект по данному первичному ключу.


Оба представления имеют следующие атрибуты:

  • queryset: базовый набор запросов QuerySet, используемый для извлечения объектов;
  • serializer_class: класс сериализации объектов.

Основные настройки:

Следующие атрибуты контролируют основное поведение.

  • queryset - Набор запросов, который следует использовать для возврата объектов с этого вида. Как правило, вы должны либо установить этот атрибут, либо переопределить get_queryset()метод.

  • serializer_class - Класс сериализатора, который должен использоваться для проверки и десериализации ввода, а также для сериализации вывода.

  • lookup_field - модельное поле, которое следует использовать для выполнения поиска объектов отдельных экземпляров модели. По умолчанию 'pk'. Обратите внимание, что при использовании гиперссылочных API вам необходимо убедиться, что как просмотры API, так и классы сериализаторов задавали поля поиска, если вам нужно использовать пользовательские значения.

  • lookup_url_kwarg - Аргумент по ключевому слову URL, который следует использовать для поиска объекта. URL-контент должен включать аргумент по ключевому слову, соответствующий этому значению. Если это не установлено, это дефолт использует то же значение, что и lookup_field.

Пагинация:

Следующие атрибуты используются для управления пагинацией при использовании с учетом представлений списка.

  • pagination_class - Класс пагинации, который следует использовать при пагинации списков.
    По умолчанию для того же значения, что и DEFAULT_PAGINATION_CLASS настройки, которая является rest_framework.pagination.PageNumberPagination. Настройка сайта pagination_class=None отключит пагинацию с этой точки зрения.

Фильтрация , фильтрующая:

  • filter_backends - Список классов бэкэнда фильтра, которые должны использоваться для фильтрации набора запросов. По умолчанию для того же значения, что и DEFAULT_FILTER_BACKENDS.

Вы можете заметить, что нам удалось избежать огромного количества шаблонного кода. Эти общие представления сочетают в себе повторно используемые элементы поведения из классов миксинов.

В этом разделе мы рассмотрели различные типы представлений на основе классов, предоставляемые Django REST Framework.

Мы реализовали представления с помощью APIView и объяснили различные типы классов миксинов.

Наконец, мы показали различные типы универсальных представлений на основе классов и продемонстрировали, как они позволяют избежать огромного количества шаблонного кода.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий