Кратко о Django Rest Framework
Что такое Django Rest Framework?
Django Rest Framework (DRF - документация на русском) — это библиотека, которая работает со стандартными моделями Django для создания гибкого и мощного API для проекта. Эта статья поможет понять структуру DRF и дать вводные данные для начала его использования
Основная архитектура
API DRF состоит из 3-х слоев: сериализатора, вида и маршрутизатора.
Сериализатор: преобразует информацию, хранящуюся в базе данных и определенную с помощью моделей Django, в формат, который легко и эффективно передается через API.
Вид (ViewSet): определяет функции (чтение, создание, обновление, удаление), которые будут доступны через API.
Маршрутизатор: определяет URL-адреса, которые будут предоставлять доступ к каждому виду.
Сериализаторы
Модели Django интуитивно представляют данные, хранящиеся в базе, но API должен передавать информацию в менее сложной структуре. Хотя данные будут представлены как экземпляры классов Model, их необходимо перевести в формат JSON для передачи через API.
Сериализатор DRF производит это преобразование. Когда пользователь передает информацию (например, создание нового экземпляра) через API, сериализатор берет данные, проверяет их и преобразует в нечто, что Django может сложить в экземпляр модели. Аналогичным образом, когда пользователь обращается к информации через API, соответствующие экземпляры передаются в сериализатор, который преобразовывает их в формат, который может быть легко передан пользователю как JSON.
Наиболее распространенной формой, которую принимает сериализатор DRF, является тот, который привязан непосредственно к модели Django:
class ThingSerializer(serializers.ModelSerializer):
class Meta:
model = Thing
fields = (‘name’, )
Настройки fields позволяют точно указать, какие поля доступны этому сериализатору. В качестве альтернативы, может быть установлен exclude вместо fields, которое будет включать все поля модели, кроме тех, которые указаны в exclude.
Сериализаторы — это невероятно гибкий и мощный компонент DRF. Хотя подключение сериализатора к модели является наиболее распространенным, сериализаторы могут использоваться для создания любой структуры данных Python через API в соответствии с определенными параметрами.
Виды (ViewSets)
Сериализатор анализирует информацию в обоих направлениях (чтение и запись), тогда как ViewSet - это тот код, в котором определены доступные операции. Наиболее распространенным ViewSet является ModelViewSet, который имеет следующие встроенные операции:
- Создание экземпляра: create ()
- Получение / чтение экземпляра: retrieve ()
- Обновление экземпляра (все или только выбранные поля): update () или partial_update ()
- Уничтожение / Удаление экземпляра: destroy ()
- Список экземпляров (с разбивкой по страницам по умолчанию): list ()
Каждая из этих функций может быть переопределена, если требуется другое поведение, но стандартная функциональность работает с минимальным кодом, а именно:
class ThingViewSet(viewsets.ModelViewSet):
queryset = Thing.objects.all()
Если необходимы дополнительные настройки, можно использовать общие представления, вместо ModelViewSet или даже отдельные пользовательские представления.
Маршрутизаторы (роутеры)
И наконец, маршрутизаторы: они предоставляют верхний уровень API. Чтобы избежать создания бесконечных URL-адресов вида: «списки», «детали» и «изменить», маршрутизаторы DRF объединяют все URL-адреса, необходимые для данного вида в одну строку для каждого ViewSet, например:
# Инициализация роутера DRF. Только один раз на файл urls.py
# из маршрутизаторов импорта rest_framework
router = routers.DefaultRouter()
#
Регистрация ViewSet
router.register(r'thing', main_api.ThingViewSet)
Затем все ViewSet, которые зарегистрированны в маршрутизаторе, можно добавить к обычным url_patterns:
url_patterns + = url (r '^', include (router.urls))
Теперь через API можно получить данные точно так же, как и любые другие обычные страницы Django.
Вернуться на верх