Drf python что это

Разработка RESTful-интерфейсов при помощи Python, Django и Django REST Framework

Эта статья является исчерпывающим руководством для начинающих программистов, желающих разрабатывать проекты с RESTful интерфейсами, используя при этом Python, Django и Django Rest Framework.

Введение

Как сказано в диссертации Роя Филдинга: «REST — это архитектурный стиль, который в основном использует существующие технологии и протоколы интернета. Попросту говоря, это представление данных для клиента в подходящем для него формате.»

Следовательно, RESTful + API (интерфейс) является широко используемой терминологией для реализации такой архитектуры и связанных с ней ограничений (например, в веб-сервисах).

Вот пример запроса GET из интерфейса Github:

Вы получите примерно следующее:

Получен набор данных в формате JSON.

JSON ( JavaScript Object Notation) — это открытый файловый формат, в котором обычный текст используется для передачи объектов данных, состоящих из пар атрибут-значение и типов данных массива. Конечно, существуют и другие форматы, такие как XML, INI, CSV и так далее. Но на сегодняшний день, JSON, благодаря своей интуитивной и понятной структуре, применяется крайне широко вне зависимости от того, какой язык программирования используется.

Python и Django

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

В языке Python используется английское представление слов (например, для методов, резервных ключевых слов и управляющих команд), что позволяет любому новичку легко начать программировать. Система типов в Python динамическая: он проверяет типы данных во время выполнения программы. Python также осуществляет автоматическое управление памятью.

Django — это высокоуровневый веб-фреймворк, который дает возможность разработчикам быстро и элегантно выполнять проекты.

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

Краткий обзор Django

В Django стандартным способом для внесения изменений в базу данных является использование модулей миграции.

Возьмем пользовательскую модель User :

Затем вы можете синхронизировать базу данных с набором моделей и миграций.

Создание REST интерфейсов при помощи Django Rest Framework

Django REST Framework (DRF) — это мощный и гибкий инструмент для создания веб-интерфейсов (web APIs). Он дает возможность разработчикам не изобретать колесо, самостоятельно создавая сложный и громоздкий REST-интерфейс с нуля. Чем сложнее будут становиться ваши проекты, тем лучше вы будете осознавать необходимость использования DRF или других полезных REST-фреймворков.

1. Инсталляция и настройка проекта

Создаем директорию проекта

Устанавливаем пакет virtualenv при помощи pip.

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

pip это менеджер пакетов. С его помощью можно устанавливать пакеты, написанные на языке Python, и далее управлять ими.

Создаем папку виртуального окружения в директории нашего проекта.

Активируем виртуальное окружение.

Устанавливаем библиотеки django, djangorestframework.

Создаем наш проект в django.

Запускаем наш проект.

Непримененными миграциями (unapplied migration(s)) являются файлы, включенные при создании проекта django.

Создаем приложение в нашем проекте.

Структура проекта на данный момент должна иметь следующий вид:

2. Модель

Каждый экземпляр модели является определенным источником информации о ваших данных. В общем и целом, каждая модель относится к определенной таблице в вашей базе данных.

Чтобы решить эту проблему, нужно в файле setting.py добавить наше приложение post в список установленных приложений.

Теперь можно применить миграцию.

3. Сериализация

Сериализаторы позволяют переводить структуру данных или объекта в формат, который можно сохранить или передать, а впоследствии восстановить обратно.

Создадим файлы serializers.py и views.py и разместим их следующим образом:

4. Представления (views)

Функция представления, или для краткости просто представление, является функцией Python. Она принимает на вход веб-запрос и возвращает ответ.

Как видно из данного кода, ListAPIView используется только для чтения, чтобы представлять коллекцию экземпляров модели.

5. URLs

Здесь мы настраиваем наши маршруты или URL-пути к нашим представлениям, от которых мы ожидаем определенных ответов на каждый запрос.

6. Завершаем настройку

Давайте убедимся, что модуль rest_framework добавлен в список приложений нашего проекта.

7. Админка Django

Так как мы пока не настроили наши POST-запросы, будем пополнять нашу базу данных через панель администратора Django.

Для этого создадим аккаунт admin с паролем 1234password и правами супеюзера.

Теперь зарегистрируем модель Post в панели администратора.

Вот и все. Теперь зайдите в панель администратора и обновите записи в модели Post. Более подробно об этом можно прочитать в документации.

8. Тестируем наш интерфейс (API)

Великолепно! Теперь настало время обновить наши представления и на этом закончить со стандартными CRUD-операциями.

9. Добавляем новые представления (views)

POST — это метод, используемый для создания новых ресурсов в нашей базе данных либо для обновления старых.

Варианты использования для разных приложений всегда разнятся, для объединения логики набора связанных представлений вы вольны использовать ListCreateAPIView или даже ViewSets.

Примечание. Поскольку мы хотим отображать данные более систематически, мы можем переопределить метод create и отобразить наш собственный обработчик пользовательских ответов.

10. Обновление URL

Вот и все. Мы ухитрились создать RESTful-интерфейс при помощи DRF. Ура!

Источник

Django Rest Framework для начинающих: создаём API для чтения данных (часть 1)

Меня зовут Стас Гаранжа, я выпускник курса «Python-разработчик» в Яндекс.Практикуме. Я хочу помочь начинающим разработчикам, которые приступили к изучению Django Rest Framework (DRF) и хотят разобраться, как устроен этот фреймворк.

Я готовлю цикл статей, в которых расскажу о разных сторонах работы DRF. У меня пока нет значимого практического опыта для описания всех изюминок при работе с этим фреймворком, поэтому в основе статьи — исследование, обобщение и по возможности непротиворечивое изложение того, что у DRF под капотом.

В этой статье разберёмся, как сделать REST API на базе Django Rest Framework, чтобы получить по GET-запросу набор записей из базы данных (БД). Иными словами, рассмотрим, как DRF работает на чтение (о том, как с помощью него создавать, изменять и удалять записи в БД, поговорим в отдельной статье).

Общую схему решения этой задачи мы рассмотрим в первой части статьи. Вторая будет посвящена детальному разбору процесса сериализации данных.

Drf python что это. Смотреть фото Drf python что это. Смотреть картинку Drf python что это. Картинка про Drf python что это. Фото Drf python что это

Несколько вводных замечаний:

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

API для сайта на Django: общая схема

Задача

На локальном сервере работает одностраничный сайт на Django. На единственной странице сайта по адресу http://localhost:8000 пользователи видят информацию о четырёх североевропейских столицах. Информация попадает на страницу из подключённой к сайту базы данных, в которой есть модель Capital с пятью полями:

idcountrycapital_citycapital_populationauthor (FK)
1NorwayOslo6935001
2SwedenStockholm9616001
3FinlandHelsinki6553001
4IcelandReykjavik1288001

Поле author через внешний ключ (foreign key) связано с моделью User, в которой есть вся информация о пользователе с конкретным id.

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

В каком виде нужно получить информацию:

Таким образом, каждую запись, которая при извлечении из базы данных является Python-объектом, принимающее приложение после декодирования json-строки должно получать в виде словаря:

В этом и состоит одно из назначений API — дать возможность различным приложениям доставать из БД сайта информацию в виде структуры данных, которую дальше можно обрабатывать.

Решаем задачу с помощью Django Rest Framework

Задача решается в два шага:

Небольшое отступление о json. Базовые структуры данных на python кодируются в json и декодируются обратно следующим образом:

PythonJSONПример PythonПример JSON
dictobject
list, tuplearray[‘элемент1’, ‘элемент2’], (‘элемент1’, ‘элемент2’)[«элемент1», «элемент2»]
strstring‘элемент1’«элемент1»
int, float, int- & float-derived Enumsnumber5, 4.25, 4.2
TruetrueTruetrue
FalsefalseFalsefalse
NonenullNonenull

Создаём сериалайзер

Для сериалайзера нужно описать поля: каждое поле будет отвечать за извлечение и представление данных из корреспондирующего поля табличной записи.

Нас интересуют данные, которые есть в трёх полях каждой табличной записи:

Значит, в сериалайзере должно быть тоже три атрибута-поля.

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

Вот примеры трёх вариантов названий полей сериалайзера:

Drf python что это. Смотреть фото Drf python что это. Смотреть картинку Drf python что это. Картинка про Drf python что это. Фото Drf python что это

Очевидно, этот тип поля сериалайзера нельзя выбирать для данных из табличной записи о названии столицы: int(‘Осло’) вызовет ValueError. А вот для данных о численности населения — самое то.

Выберем следующие типы полей сериалайзера:

Название поля в таблице (модели)Тип поля в таблице (модели)Тип корреспондирующего поля сериалайзера
capital_citymodels.CharFieldserializers.CharField
capital_populationmodels.IntegerFieldserializers.IntegerField
authormodels.ForeignKeyserializers.CharField

О соотношении полей сериалайзера и полей Django-моделей можно прочитать в документации DRF.

Код сериалайзера разместим в том же приложении, где находится Django-модель, под именем serializers.py:

Сериалайзер в действии

В serializer_example_1.py созданы классы с данными об авторах и о столицах для записей в таблицах:

Созданы объекты соответствующих записей:

Объединены записи в список по подобию кверисета из Django-модели:

Выведем в консоль содержимое атрибута data сериалайзера:

В каждом OrderedDict содержится информация только из тех полей табличных записей, которые были состыкованы с полями сериалайзера. Данных о содержимом поля country нет — сериалайзер не настроен доставать эту информацию, потому что мы не создавали корреспондирующего поля в сериалайзере.

Отображаем (рендерим) информацию в формате json

Далее необходимо создать экземпляр рендера нужного типа и вызвать у него метод render :

В результате мы увидим байтовую строку с массивом json-объектов:

Что нужно ещё

Итак, мы испытали сериалайзер и посмотрели, как пропущенный через него набор табличных записей был преобразован в json-формат.

Чтобы сайт начал отдавать сериализованные данные, остаётся описать контроллер (view) и указать url-маршрут — эндпоинт, при обращении к которому сайт будет отдавать данные о столичных городах.

Контроллер

Во views.py создадим класс контроллера. Нам понадобятся следующие инструменты DRF:

Внутри контроллера описываем один метод — get. Почему он называется именно так?

Пример: если поступил GET-запрос, то будет задействован метод get контроллера.

В методе get опишем ту же логику, что и в файле с пробным запуском сериалайзера:

После того как отработал метод get, работа контроллера выглядит так:

Маршрут (эндпоинт)

Здесь та же схема действий, как в классическом Django. Подключаем маршруты приложения capitals:

Прописываем сам маршрут в приложении capitals и связываем маршрут с контроллером:

API в действии

Чтобы посмотреть, как работает API, можно:

Осталось выполнить шаги 2 и 3.

Если всё отработало штатно, в корневой директории проекта появится файл capitals.txt со следующим содержимым:

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

Browsable API — удобный инструмент для тестирования API на DRF

Django Rest Framework позволяет посмотреть в браузере, какую информацию будет отдавать API при обращении к конкретному маршруту (эндпоинту). Достаточно ввести маршрут в адресную строку, и откроется страница с данными о запросе и результате его выполнения. За такое отображение отвечает BrowsableAPIRenderer.

Drf python что это. Смотреть фото Drf python что это. Смотреть картинку Drf python что это. Картинка про Drf python что это. Фото Drf python что это

Итак, мы рассмотрели, как сделать API на базе DRF, чтобы получить по GET-запросу набор записей из Django-модели. Во второй части подробно разберём работу сериалайзера на чтение.
Если у вас появились вопросы по решению задачи, пишите в комментариях.

Источник

Web API с помощью Django REST framework

Веб-cервис (англ. web service) — идентифицируемая веб-адресом программная система со стандартизированными интерфейсами. Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (XML, JSON и т. д.). Веб-служба является единицей модульности при использовании сервис-ориентированной архитектуры приложения.

Одним из подходов создания веб сервиса является rest.
Rest (сокр. англ. Representational State Transfer, «передача состояния представления») — стиль построения архитектуры распределенного приложения. Данные в REST должны передаваться в виде небольшого количества стандартных форматов (например HTML, XML, JSON). Сетевой протокол (как и HTTP) должен поддерживать кэширование, не должен зависеть от сетевого слоя, не должен сохранять информацию о состоянии между парами «запрос-ответ». Утверждается, что такой подход обеспечивает масштабируемость системы и позволяет ей эволюционировать с новыми требованиями.

Django REST framework — удобный инструмент для работы с rest основанный на идеологии фреймворка Django.

Требования к окружению:
Python (2.6, 2.7)
Django (1.3, 1.4, 1.5)

Установка

Установить можно привычной для нас командой pip:

И можно поставить дополнительные пакеты:

Или же сделать клон проекта с Github:

Не забываем прописать приложение в INSTALLED_APPS:

А также добавить запись в urls.py:

Url можно ставить любой на Ваш вкус, главное подключить файл с урлами rest framework (rest_framework.urls).

Пример использования

Создадим API для работы с пользователями и их группами.

Для начала нам нужно определить некоторые Serializers, которые мы будем использовать
Пропишем views.py

Мы создали функцию api_root, которая будет отправной точкой для нашего API. И четыре класса, для связи с моделями и указали какие serializers нужно при этом использовать.

Добавим ссылки в urls.py

Важный момент использование user-detail и group-detail. Для корректной связи с views.py нужно использовать именование вида -detail.
В format_suffix_patterns мы указали суфикс для наших urls.

Settings
Результат

Используя curl в консоли испытаем что же получилось:

В браузере можно увидить что то подобное:
Drf python что это. Смотреть фото Drf python что это. Смотреть картинку Drf python что это. Картинка про Drf python что это. Фото Drf python что это

Источник

Кратко о 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:

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

Сериализаторы — это невероятно гибкий и мощный компонент DRF. Хотя подключение сериализатора к модели является наиболее распространенным, сериализаторы могут использоваться для создания любой структуры данных Python через API в соответствии с определенными параметрами.

Виды (ViewSets)

Каждая из этих функций может быть переопределена, если требуется другое поведение, но стандартная функциональность работает с минимальным кодом, а именно:

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

Маршрутизаторы (роутеры)

И наконец, маршрутизаторы: они предоставляют верхний уровень API. Чтобы избежать создания бесконечных URL-адресов вида: «списки», «детали» и «изменить», маршрутизаторы DRF объединяют все URL-адреса, необходимые для данного вида в одну строку для каждого ViewSet, например:

Затем все ViewSet, которые зарегистрированны в маршрутизаторе, можно добавить к обычным url_patterns:

Теперь через API можно получить данные точно так же, как и любые другие обычные страницы Django.

Источник

Руководство для начинающих по Django Rest Framework

Russian (Pусский) translation by Liliya (you can also view the original English article)

Итак, вы учитесь использовать Django Web Framework и вы любите его. Но вам нужен привлекательный, простой в использовании API для вашего приложения? Посмотрите не дальше, чем Django Rest Framework (DRF). DRF является мощным, утонченный и удивительно простым в использовании. Он предлагает привлекательную, доступную в Интернете версию вашего API и возможность возврата сырого JSON. Django Rest Framework обеспечивает мощную сериализацию модели, отображение данных с использованием стандартных представлений, основанных на функциях, или получить гранулы с мощными представлениями на основе классов для более сложных функций. Все в полностью совместимой REST оболочке. Давайте начнем.

Укладка фундамента

Tuts + имеет два отличных видео о том, как установить virtualenv и virtualenvwrapper. Потратьте несколько минут, чтобы пройти через эти видеоролики, чтобы получить virtualenv и virtualenvwrapper, установленные на вашем компьютере. Если вы уже установили их, пропустите следующий раздел.

Настройка виртуальной среды

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

Установка приложения Django

Fab? Что это?

Работа с сериализацией

После загрузки оболочки введите следующие несколько строк, чтобы получить запись автора из базы данных, которая просто оказалась моей. Какое совпадение. 🙂

Аналогичным образом вы можете получить все записи автора из базы данных с помощью другой команды:

Не внося никаких изменений, сериализатор дает нам довольно много мощи. Вернитесь в оболочку и давайте рассмотрим.

Проверка API-интерфейса, доступного в Интернете

Сначала откройте bookreview / urls.py и добавьте следующую строку сразу после маршрута index_view :

Затем откройте bookreview / views.py и добавьте эти строки в конец файла:

Затем добавьте импорт для AuthorSerializer в верхней части страницы:

Теперь, когда у нас есть представление API авторов, попробуйте нажать этот URL с помощью команды curl :

Довольно шумный, да?

Предоставьте несколько авторских книг!

Затем добавьте следующую строку сразу после docstring класса AuthorSerializer :

Затем добавьте книги в свойство полей внутреннего класса Meta AuthorSerializer :

Перезагрузите /authors/ в конечном результате, и теперь вы должны увидеть массив книг для каждого автора. Неплохо бы еще несколько строк кода, да?.

Хороший парень DRF!

Использование SerializerMethodField для создания пользовательских свойств

Сразу после строки документации BookSerializer добавьте следующую строку:

Затем после определения класса Meta BookSerializer добавьте следующие строки:

Затем, наконец, нам нужно добавить наше новое свойство в список полей. Измените это:

Перезагрузите /authors/ в конечном результате, и теперь вы должны увидеть URL-адрес, возвращающийся вместе с другой информацией о книге.

Добавление конечной точки автора

Затем откройте view.py и добавьте следующие строки после класса AuthorView :

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

Рефакторинг для победы!

Теперь самое подходящее время для быстрого рефакторинга. Поскольку Django предлагает вариант назначения ваших маршрутов, мы можем ссылаться на маршрут по этому имени. Это не позволяет нам создавать URL-адрес вручную. Откройте templates/index.html и замените следующий фрагмент:

Сохранение данных: пусть DRF работает для вас!

До сих пор наше приложение было только для чтения. Пора начать сохранять некоторые данные. Откройте templates/index.html и добавьте следующие строки под заголовком авторов:

Что сейчас произошло? По умолчанию API View, который мы использовали, разрешал только запросы GET конечной точке авторов. Изменив его на ListCreateAPIView, мы сказали DRF, что хотим также разрешить POST запросы. Он делает все остальное для нас. Мы могли бы также легко определить наш собственный метод post в AuthorView и написать немного лишнего материала. Это может выглядеть так:

Имейте в виду, что, хотя DRF обеспечивает целостность базы данных, основанную на свойствах модели, мы не устанавливаем какую-либо безопасность для тех, кто может получить доступ или использовать эту форму. Вход безопасен, вход в систему и управление разрешениями выходит за рамки этой статьи, но достаточно сказать, что у DRF есть функции для доступа к просмотрам, с которыми вы работали, и это довольно банально для настроек.

Заканчиваем

Вы уже много узнали о платформе Django Rest Framework: как реализовать API-интерфейс для просмотра веб-страниц, который может вернуть JSON для вас, как настроить сериализаторы для составления и преобразования ваших данных, а также как использовать представления на основе классов для абстрагирования кода шаблона.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *