зачем нужен django rest framework

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 в консоли испытаем что же получилось:

В браузере можно увидить что то подобное:
зачем нужен django rest framework. image loader. зачем нужен django rest framework фото. зачем нужен django rest framework-image loader. картинка зачем нужен django rest framework. картинка image loader.

Источник

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

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

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

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

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

зачем нужен django rest framework. image loader. зачем нужен django rest framework фото. зачем нужен django rest framework-image loader. картинка зачем нужен django rest framework. картинка image loader.

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

Надеюсь, статья станет хорошим подспорьем изучения 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

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

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

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

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

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

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

зачем нужен django rest framework. image loader. зачем нужен django rest framework фото. зачем нужен django rest framework-image loader. картинка зачем нужен django rest framework. картинка image loader.

Очевидно, этот тип поля сериалайзера нельзя выбирать для данных из табличной записи о названии столицы: 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.

зачем нужен django rest framework. image loader. зачем нужен django rest framework фото. зачем нужен django rest framework-image loader. картинка зачем нужен django rest framework. картинка image loader.

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

Источник

Django REST Framework: REST API на Python с нуля

зачем нужен django rest framework. 1 18wpFEnRlak87pyyIHDcjw. зачем нужен django rest framework фото. зачем нужен django rest framework-1 18wpFEnRlak87pyyIHDcjw. картинка зачем нужен django rest framework. картинка 1 18wpFEnRlak87pyyIHDcjw.

1. Знакомство с REST

Термин REST API расшифровывается как Representational State Transfer Application Programming Interface. Следовательно, RESTful API — это программный интерфейс приложения, соответствующий ограничениям архитектурного стиля REST.

REST — не протокол и не стандарт. Это, как уже было сказано, архитектурное ограничение. Чтобы API считался RESTful, он должен соответствовать следующим критериям.

Благодаря вышеперечисленным архитектурным правилам REST API масштабируемый, переносимый и гибкий.

2. Что такое Django REST Framework?

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

Существует множество библиотек для Django, расширяющих его функционал. Одна из них, о которой мы поговорим сегодня, — это Django REST Framework или DRF, которая позволяет сериализовать данные из Django ORM через REST API.

Сериализация — это преобразование таблиц из базы данных в формат JSON.

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

Давайте создадим сайт бронирования отелей! Исходный код и справка доступны на GitHub.

3. Установка Django

Прежде чем приступить непосредственно к работе с REST API, сделаем краткий экскурс в Django.

Источник

Как написать простой веб-сервис с помощью Django REST

зачем нужен django rest framework. 18.thumbnail. зачем нужен django rest framework фото. зачем нужен django rest framework-18.thumbnail. картинка зачем нужен django rest framework. картинка 18.thumbnail.

Время чтения: 3 минуты

Отправим вам статью на:

Разработка веб-приложений и других веб-проектов в нашей команде часто проходит с использованием фреймворка Django, и сегодня я расскажу почему. Экономя время занятым читателям, скажу сразу и в двух словах: простота, скорость (создания веб-приложений). А для тех, кому интересна техническая сторона: что, для чего и как — я распишу шаги создания нехитрого веб-сервиса.

Что такое Django?

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

Изначально Django был разработан для написания новостных сайтов, поэтому основным требованием было решение двух проблем:

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

Одним из основных принципов Django является DRY (Don’t Repeat Yourself), что в переводе с английского означает «Не повторяйся», который нацелен на устранение повторений в коде.

Для чего нужен Django REST Framework?

Как понятно из названия, Django REST Framework — это лёгкий фреймворк для Django, поддерживающий идеологию REST (Representational State Transfer) — репрезентативную передачу состояния. Использование этого фреймворка позволяет легко стандартизировать запросы к базе данных и одновременно создавать RESTful WEB API нашего сайта.

Итак, переходим к созданию простейшего приложения для демонстрации скорости разработки с использованием Django REST Framework.

Установку и настройку Python, Django я пропускаю, так как по этому поводу в Интернете материала очень много. Для начала нам необходимо создать проект. Делается это командой

Имя нашего проекта будет BlogPost. Команда автоматически создаст каталог проекта и некоторые необходимые нам файлы по умолчанию. Далее нам необходимо создать модели наших таблиц в базе данных. Для этого редактируем файл models.py:

Мы создали две таблицы BlogPost и Comment. На самом деле в базе данных они буду именованы не так, но мы работает только с ORM, поэтому нам об этом заботится не надо. Далее создадим файл ресурсов resource.py содержащий следующее:

Итак, мы создали модели ресурсов, с которыми потом будут работать представления. Мы указали необходимые для вывода поля, добавили методы для вычислимых молей (в нашем примере это ссылки).

Далее необходимо добавить ссылки в urls.py. Ссылка создается с помощью регулярного выражения и ассоциируется с необходимым представлением и моделью ресурсов:

Представления имеют говорящие названия. Теперь в файле settings.py добавим описание базы данных:

Для упрощения используем sqlite3. Список приложений (settings.py) необходимо привести к следующему виду:

Тем самым мы описали, что наше приложение BlogPost включено в проект, а приложение djangorestframework нам необходимо для того, что бы django смог подключить тестовые шаблоны для вывода данных. Запускаем следующую команду:

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

Каким же функционалом обладает наш сервис?

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

Подпишитесь

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

Источник

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

Источник

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

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