Django rest framework что это
Перейти к содержимому

Django rest framework что это

  • автор:

Django REST Framework — что это такое

Этим видео мы открываем серию занятий по очень популярному пакету Django REST Framework (сокращенно – DRF). Как вы уже догадались из названия – это дополнение к известному фреймворку Django, о котором мы с вами уже говорили. Если вы с ним не знакомы, то советую вначале посмотреть этот плейлист:

Так что же делает DRF и зачем он нужен? Сейчас, современным web-сайтам приходится взаимодействовать не только с браузерами клиентов, где отображаются соответствующие HTML-документы, но и с другими произвольными конечными устройствами. Часто это смартфоны, работающие под различные ОС (например, Android, iOS) и программы, написанные, как правило, на языке Java, также должны получать доступ к данным сайта и уметь с ним взаимодействовать. Например, у многих установлены программы по online-банкингу или программы от сотового оператора, где можно оперативно посмотреть информацию и выполнить определенные действия.

Как раз здесь происходит взаимодействие с сервером по определенному программному протоколу. И аббревиатура

REST (от англ. Representational State Transfer)

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

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

API (от англ. Application Programming Interface)

И Django REST Framework как раз обеспечивает взаимодействие любого конечного устройства через API с сайтом на сервере. То есть, DRF, фактически, это инструмент создания API для нашего сайта с целью удаленного взаимодействия с ним. Например, мы хотим в программе на Java, которая запущена на смартфоне, отобразить список статей сайта. Для этого из java-программы отправляется обычный GET-запрос к сайту, скажем, такой:

Сайт формирует данные по этому запросу и возвращает их клиенту (смартфону), например, в JSON-формате:

{"pages": [ {"title": "Django - what is that", "url": "https://proproprogs.ru/django/django-chto-eto-takoe-poryadok-ustanovki"}, {"title": "Model MTV", "url": "https://proproprogs.ru/django/model-mtv-marshrutizaciya-funkcii-predstavleniya"}, {"title": "Request, redirect", "url": "https://proproprogs.ru/django/marshrutizaciya-perenapravleniya"} ] }

То есть, возвращается не HTML-документ, а «сырые» данные в формате JSON. Как раз они и формируются с помощью Django REST Framework. Затем, формат JSON обрабатывается Java-программой на смартфоне и отображаются данные уже в приложении клиента.

  • создание, чтение, изменение и удаление данных (сокращенно это называется CRUD);
  • проверку корректности передаваемых данных от клиента и защиту от возможных хакерских атак;
  • авторизацию и регистрацию пользователей;
  • права доступа к данным через API.

Архитектура Django REST Framework

Теперь, когда мы с вами в целом разобрались для чего нужен Django REST Framework, давайте посмотрим на его общую архитектуру, из которой хорошо виден принцип работы DRF. Вначале приходит запрос от клиента, который обрабатывается маршрутизатором фреймворка Django. Например, такой: https://proproprogs.ru/api/v1/listpages/ Далее, с этим запросом связано одно из представлений, которое реализует API-сайта. То есть, представление для API уже создается средствами DRF. Задачей представления является обработка запроса и отправка результата пользователю. Так как для обработки необходимо сформировать некоторые данные, как правило, в формате JSON, то для этого управление передается специальному объекту – сериализатору. Сериализаторы – это «сердце» Django REST Framework. Именно они формируют данные для ответа на API-запросы, а также выполняют парсинг входной информации. Например, сериализатор может взять данные из таблиц БД и вернуть JSON-строку узлу, который отправил запрос. Или, сериализатор может удалить или изменить данные в таблицах БД по определенному запросу. На последующих занятиях мы подробно познакомимся с созданием представлений, сериализаторов, а также управлением правами доступа и задачами авторизации и аутентификации пользователей. Поехали! Курс по Django: https://stepik.org/a/183363

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

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

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

Framework

Создавая приложение или любой другой программный продукт, мы хотим делать это быстро и качественно. Проще этого добиться, используя опыт и наработки других разработчиков, ведь многие задачи, которые мы встречаем в процессе работы, уже были кем-то решены. По сути, использование фреймворка позволяет сосредоточится на задачах бизнеса и не задумываться над техническими деталями там, где это возможно. Нужно отрисовать кнопку на сайте? Сделать авторизацию или сброс пароля? Сохранить данные пользователя из формы на сайте в базу данных? Для этого всё уже готово — бери и пользуйся!

Также важно понимать отличия Framework от библиотеки. Это похожие вещи. В обоих случаях в Python вы должны установить нужный пакет, импортировать и пользоваться им. Разница в том, что библиотеку в проекте вы используете там, где нужно, и так, как вы хотите, а фреймворк сам определяет способ разработки приложения, то есть не только предоставляет удобные инструменты разработки в виде вспомогательных функций и классов, но и непосредственно формирует архитектуру проекта, создает структуру кода, проще говоря, определяет путь, по которому вы будете создавать свое приложение.

Django

На сегодняшний день наиболее функциональным фреймворком для создания веб-приложений на языке Python является фреймворк Django. Django можно назвать MVC-фреймворком, так он реализует взаимодействие пользователя и системы:

  • Model (хранит данные пользователя)
  • View (отображает данные пользователя)
  • Controller (принимает изменения данных от пользователя).

Внутри Django эта терминология звучит немного иначе, но суть остается той же.

Разработка Django началась в 2003 году программистами Adrian Holovaty и Simon Willison, а публичный релиз состоялся в 2005 году. Функционал фреймворка хорошо отвечал требованиям в веб-разработке того времени. Он активно развивается и до сих пор. Хотя этот фреймворк и считается довольно крупным и многофункциональным, сам по себе он не мог удовлетворить все запросы веб-разработчиков. За время его существования сторонними разработчиками было создано огромное множество библиотек и фреймворков в качестве дополнений к Django, которые упрощают реализацию тех или иных задач: аутентификация через социальные сети, кеширование данных, хранение файлов в облаке и многое другое. Некоторые из дополнений со временем сами стали частью проекта Django, как это произошло с библиотекой South, управляющей миграциями базы данных. Но большинство дополнений так и остались независимыми пакетами. Одним из них и является Django REST Framework, при помощи которого мы можем создавать Web API на основе Django.

Web API

Сегодня сеть интернет построена по принципу Клиент-Серверного взаимодействия. Клиент посылает запрос — Сервер ему отвечает. В случае, когда между собой общаются два Сервера, мы условно называем Клиентом того, который отправил запрос и ожидает ответ, а Сервером будет тот, кто принимает запрос и отвечает не него. Взаимодействие браузеров и веб-сайтов (первые выступают в роли Клиента, а вторые в роли Сервера) традиционно делалось при помощи технологии html-рендеринга, именно так изначально это делал Django. Чтобы получить данные с веб-сайта, браузер отправляет запрос GET к Серверу. Сервер формирует ответ в виде html-страницы и передает ее браузеру. Так Сервер передает данные браузеру, но как браузер может передать данные Серверу? В этой самой html-странице Сервер заложил все необходимые веб-формы, заполнив которые, пользователь мог бы передать свои данные обратно на сервер. Когда вы ввели свои данные в форму на сайте, бразуер отправляет Серверу запрос POST, в котором содержатся ваши данные, а Сервер обрабатывает их и записывает в базу данных.

Все это отлично работало, но уже в середине нулевых такой подход перестал удовлетворять возрастающим требования в веб-разработке. Появлялись мобильные приложения, различные гаджеты с доступом в интернет, и для них уже не подходил стандартный способ html-рендеринга на сервере, ведь теперь каждому клиенту нужно было отрисовать данные по-своему. Постоянно увеличивалось взаимодействие серверов друг с другом, и html-формат уже не подходил. Для всех этих задач есть другой способ обмена данными — Web API. Смысл этого способа в том, что Сервер передает Клиенту не html-страницу, а непосредственно данные, никак не влияя на то, как эти данные будут в итоге представлены. Наиболее популярными форматами для передачи данных становятся XML и JSON. Таким образом Сервер полностью избавляется от задачи отрисовки данных. Какое-то время длился переходный период, когда разработчикам веб-приложений на Сервере приходилось поддерживать оба способа одновременно: html рендерился на Сервере для браузеров, а Web API использовался для мобильных приложений и интеграции с другими серверами. Понятно, что разработчикам приложений на Сервере приходилось делать двойную работу. Но в начале десятых ситуация стала меняться в пользу Web API. Этому способствовало молниеносное развитие инструментов на языке JavaScript, а также появление различных веб-фреймворков, одним из которых и является предмет данной статьи.

Браузерные приложения быстро научились отрисовывать веб-страницы самостоятельно, получая чистые данные с Сервера. Веб-приложения на сервере научились создавать API быстро и легко. Так сформировалась четкое разделение на Backend и Frontend разработку: тех, кто поддерживает приложение на Сервере, и тех, кто делает браузерные (клиентские) приложения. А Web API стал универсальным способом общения для Сервера и всех его клиентов (браузеров, мобильных приложений, других Серверов). Конечно, это не могло не привести к развитию стандартов в общении между системами. И Клиенту, и Серверу необходимо знать каким образом общаться с друг с другом, как передавать данные, как сообщать об ошибках. Разработчики всегда могли договориться о том, как взаимодействовать их приложениям, но наличие некоего стандарта в веб-разработке позволило бы эту задачу облегчить. И вот в начале десятых таким стандартом стала концепция REST.

REST

В 2000 году Рой Филдинг написал докторскую диссертацию, где изложил концепцию REST. Там были рекомендации о том, как спроектировать Сервер, чтобы ему было удобно общаться с Клиентами. Выделю два главных принципа создания приложений в стиле REST:

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

На данный момент мы можем найти фреймворк для создания приложений в стиле REST практически для каждого языка программирования, используемого в веб-разработке. Логика построения Web API на Сервере в этих фреймворках реализована одинаково.

Действия для управления данными привязаны к определенным HTTP-методам. Существует несколько стандартных действий для работы с данными — это Create, Read, Update, Delete. Часто их обобщают как CRUD.

  • Для создания объекта используется http-метод POST
  • Для чтения — http-метод GET
  • Для изменения — http-метод PUT
  • Для удаления — http-метод DELETE

Давайте представим сообщения от Клиента к Серверу через Web API в стиле REST .

У нас есть объект Кошка, и мы хотим создать запись о кошке на Сервере. Для этого мы отправляем запрос на сервер:

С данными в теле запроса

Name: “My Best Cat” Color: “Red” Age: 2 

Плюс к этому запросу (и все другим) будет добавлен ключ аутентификации.

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

Сервер ответит на этот запрос вот таким сообщением:

Id: 21 Name: “My Best Cat” Color: “Red” Age: 2 

Сервер взял все поля, переданные клиентом, и добавил к ним поле Id. Здесь работает правило REST, согласно которому каждый ресурс должен иметь уникальный идентификатор и быть доступным по определенному URL. Сервер создал ресурс и вернул нам его Id.

Теперь мы можем получить данную запись по URL

Id: 21 Name: “My Best Cat” Color: “Red” Age: 2 

Что, если Клиент хочет изменить созданные им данные на сервере?

С телом запроса:

Id: 21 Name: “My Best Cat” Color: “Black” Age: 2 
Id: 21 Name: “My Best Cat” Color: “Black” Age: “2” 

Метод PUT используется для изменения данных. Номер 21 в URL говорит о том, какой именно объект нужно изменить. Теперь наша кошка имеет цвет “Black”.

Для удаления записи на Сервере достаточно отправить запрос:

С телом запроса:

Тут также мы указываем в Id объекта в URL, но передавать никаких данных в теле запроса для удаления объекта уже не требуется.

Django REST Framework

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

Тут я бы хотел процитировать слова Тома Кристи, создателя Django REST Framework.

“Неудивительно, что Django REST framework — это API фреймворк для Django. И он пытается заполнить все пробелы в том, как исторически был спроектирован веб-фреймворк Django”.

И действительно, пусть Django был спроектирован давно, он до сих отлично решает свои задачи. Однако с появлением новых требований в веб-разработке, отсутствие компонентов для создания Web API воспринимается как пробел.

Django REST framework способен этот пробел заполнить.

А мы уже заполнили все пробелы в теории и терминологии и готовы перейти к практике!

© Copyright 2014 — 2023 mkdev | Privacy Policy

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

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

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

  1. Единый интерфейс.
    Единый интерфейс (uniform interface) строится вокруг ресурсов с уникальными идентификаторами и уникальными URL, а каждая страница реализовывает какие-либо из HTTP-методов — GET, POST, DELETE или UPDATE все они отвечают за различные манипуляции конкретным ресурсом.
  2. Архитектура “Клиент-Сервер”
    Сервер анализирует запрос клиента и отправляет ему ответ. Получив ответ от сервера, клиент определяет, как именно информация отобразится у конечных пользователей.
  3. Нестационарные запросы
    Нестационарность (stateless) означает, что каждый HTTP-запрос полностью изолирован. Сервер не полагается на информацию из предыдущих запросов — клиент отправляет HTTP-запрос, включающий сразу всю необходимую ему информацию. Сервер не хранит контекста между запросами, каждый запрос содержит всю необходимую информацию.

Благодаря вышеперечисленным архитектурным правилам 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.

3.1. Создание виртуальной среды

$ virtualenv venv
$ source venv/bin/activate

3.2. Установка зависимостей

$ pip install djangorestframework
$ pip install django

3.3. Начало проекта

$ django-admin startproject hotel_reservation
$ cd demo/

3.4. Изменение директории

$ mv hotel_reservation/manage.py .
$ mv hotel_reservation/hotel_reservation/* hotel_reservation/
$ rm -r hotel_reservation/hotel_reservation/

3.5. Запуск сервера

$ python manage.py runserver

Теперь перейдите по адресу http://127.0.0.1:8000/ в браузере. Если все прошло успешно, то вы увидите следующую страницу:

3.6. Создание приложения

Приложения в Django — это независимые многократно используемые компоненты. Создадим приложение hotel_app .

$ django-admin startapp hotel_app

3.7. Список приложений в проекте

Чтобы подключить к проекту hotel_reservation приложения hotel_app и rest_framework , необходимо отредактировать файл results/settings.py , указав эти приложения в списке INSTALLED_APPS :

INSTALLED_APPS = [ 
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hotel_app'
'rest_framework'

]

3.8. Миграции

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

$ python manage.py migrate

3.9. Административная панель

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

$ python manage.py createsuperuser

Снова выполните миграции, авторизуйтесь.

3.10. Создание модели

Django ORM абстрагирует базу данных, позволяя легко запрашивать данные и манипулировать ими через объектно-ориентированное отображение, называемое моделью. Django ORM заставляет писать код согласно паттерну MVC (Model View Controller), который станет интуитивно понятным для вас после прохождения кривой обучения.

hotel_app/models.py :

from datetime import timedelta, datetime
from django.db import models
from datetime import datetime

class Guest(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField(default=20)
phone = models.CharField(max_length=20)
email = models.CharField(max_length=30)

def __str__(self) -> str:
return self.name


class Hotel(models.Model):
name = models.CharField(max_length=20)
location = models.CharField(max_length=50)
phone = models.CharField(max_length=20)
email = models.CharField(max_length=30)

def __str__(self) -> str:
return self.name


class Room(models.Model):
room_no = models.IntegerField(default=101)
price = models.FloatField(default=1000.0)
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
is_booked = models.BooleanField(default=False)

def __str__(self) -> str:
return str(self.room_no)

def hotel_name(self) -> str:
return self.hotel


class Booking(models.Model):
guest = models.ForeignKey(Guest, on_delete=models.CASCADE)
hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
num_of_guest = models.IntegerField(default=1)
checkin_date = models.DateField(default=datetime.now)
checkout_date = models.DateField(default=datetime.now)
is_checkout = models.BooleanField(default=False)

def __str__(self) -> str:
return self.guest.name

def hotel_name(self) -> str:
return self.hotel.hotel

def charge(self) -> float:
return self.is_checkout* \
(self.checkout_date - self.checkin_date + timedelta(1)).days* \
self.room.price

Мы создали модель, хранящую имя студента и его оценки. Метод __str__ определяет имя объекта, отображаемое в браузере. Если пропустить определение данного метода, то вы увидите в панели администратора объект под названием .

3.11. Не забывайте о миграциях!

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

$ python manage.py makemigrations
$ python manage.py migrateviews.

3.12. Добавление приложения в админ-панель

Во встроенное приложение административной панели можно добавить созданную ранее пользовательскую модель.

hotel_app/admin.py :

from django.contrib import admin
from .models import Guest, Hotel, Room , Bookingadmin.site.register(Guest)
admin.site.register(Hotel)
admin.site.register(Room)
admin.site.register(Booking)

Теперь мы завершили ту общую часть разработки веб-приложения, которая относится к фреймворку Django. Настало время приступить к проектированию REST API.

4. Написание Django REST API

Структура директорий проекта:

$ tree -I 'venv'
.
├── db.sqlite3
├── hotel_app
│ ├── __init__.py
│ ├── __pycache__
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
| ├── serializer.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── hotel_reservation
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py

Добавим в проект файлы urls.py и serializers.py . Вот новый список файлов.

4.1. Сериализатор

Сериализация — процесс перевода структуры данных в последовательность байтов. Она используется для передачи объектов по сети и для сохранения их в файлы (Википедия).

hotel_app/serializers.py :

from rest_framework import fields, serializers
from .models import Guest, Hotel, Room , Booking


class GuestSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Guest
fields = ("name", "age", "phone", "email")


class HotelSerializer(serializers.ModelSerializer):
class Meta:
model = Hotel
fields = ("name", "location", "phone", "email")


class RoomSerializer(serializers.ModelSerializer):
class Meta:
model = Room
fields = ("room_no", "price", "hotel", "is_booked")


class BookingSerializer(serializers.ModelSerializer):
guest = GuestSerializer
hotel = HotelSerializer
room = RoomSerializer
class Meta:
model = Booking
fields =("guest", "hotel", "room", "checkin_date", "checkout_date", "charge",)

Сериализаторы определяют, как именно и какие данные отобразит представление API. При запросе по REST API к экземпляру модели Hotel мы получим список следующих полей, взятых из самой модели при помощи сериализатора:

 “name” : “”, 
“location” : “”,
“phone” : “”,
“email” : ””,
>

4.2. Представления

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

from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view

from .models import Guest, Hotel, Room , Booking
from .serializer import GuestSerializer ,HotelSerializer, RoomSerializer, BookingSerializer

from collections import namedtuple


nt = namedtuple("object", ["model", "serializers"])
pattern = "guest" : nt(Guest, GuestSerializer),
"hotel" : nt(Hotel, HotelSerializer),
"room" : nt(Room, RoomSerializer),
"booking": nt(Booking, BookingSerializer),
>

@api_view(["GET", "POST"])
def ListView(request, api_name):
object = pattern.get(api_name, None)
if object == None:
return Response(
data = "Invalid URL",
status = status.HTTP_404_NOT_FOUND,
)
if request.method == "GET":
object_list = object.model.objects.all()
serializers = object.serializers(object_list, many=True)
return Response(serializers.data)

if request.method == "POST":
data = request.data
serializers = object.serializers(data=data)

if not serializers.is_valid():
return Response(
data = serializers.error,
status = status.HTTP_404_NOT_FOUND
)
serializers.save()
return Response(
data = serializers.error,
status = status.HTTP_201_CREATED
)

Вышеописанное представление возвращает результат для URL-параметра api_name при его соответствии одному из следующих значений: guest, hotel, room или booking . В противном случае представление отправляет клиенту сообщение Invalid URL .

4.3. URL: ссылки на ресурсы

hotel_app/urls.py :

from django.urls import re_path
from .views import ListViewurlpatterns = [
re_path(r"^(?P[a-z]+)", ListView, name='hotel-objects'),
]

hotel_reservation/urls.py :

from django.contrib import admin
from django.urls import path, includeurlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘hotel-app’, include(‘hotel_app.urls’))
]

Таким образом определяется базовый URL-путь для API: http://127.0.0.1:8000/hotel-app/.

Перейдя по данной ссылке, вы получите доступ ко всем ранее определенным “разделам” REST API проекта:

  • guest : http://127.0.0.1:8000/hotel-app/guest/.
  • hotel : http://127.0.0.1:8000/hotel-app/hotel/.
  • room : http://127.0.0.1:8000/hotel-app/room/.
  • booking : http://127.0.0.1:8000/hotel-app/booking/.

При попытке запросить какое-либо иное API браузер получит от сервера сообщение об ошибке, так как в приложении бронирования отеля существуют только эти четыре вида API.

5. Выводы

Мы успешно реализовали пользовательский интерфейс отправки запросов HTTP-методами GET и POST. API готов, к нему можно получить доступ по соответствующей ссылке. Весь исходный код руководства доступен на GitHub.

  • 4 совета Python Django разработчику
  • Галерея лучших модулей Python
  • Python Django: контактная форма с автоматической отправкой Email

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

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

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

При работе с приложениями Python всегда рекомендуется изолировать вашу разработку виртуальной средой. Это помогает предотвратить конфликты версий между библиотеками, которые вам нужны в вашем приложении, и библиотеки, которые вы, возможно, уже установили на вашем компьютере, упрощают установку зависимостей в виртуальном env с помощью файла requirements.txt , и, наконец, он обеспечивает совместное использование среды разработки с помощью других разработчиков.

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

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

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

$ mkvirtualenv drf
$ workon drf

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

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

Поскольку в этой статье речь не идет о самом Django, я сэкономил некоторое время, создав репозиторий, содержащий приложение, в котором мы будем работать. Это простая книжная полка, которая позволит нам хранить списки авторов и книг. Загрузите репозиторий компаньонов в эту статью в каталог по вашему выбору, а затем запустите pip install -r requirements.txt , чтобы установить все зависимости. Не забудьте убедиться, что вы активировали виртуальную среду, которую мы установили на последнем шаге. По завершении установки вы можете ввести fab runningerver для запуска локального веб-сервера и открыть веб-браузер, указывающий на http://127.0.0.1:8000/ . Если вы видите список авторов на экране, тогда вам будет хорошо дальше двигаться.

Если в какой-то момент вы не получите ожидаемых результатов, попробуйте переключить ветвь локального репозитория в финал, чтобы увидеть результаты: git checkout final .

Fab? Что это?

«Fabric — это библиотека Python (2,5 или выше) и средство командной строки для оптимизации использования SSH для задач развертывания приложений или системного администрирования».

Хотя более полная дискуссия о Fabric выходит за рамки этой статьи, я внедрил некоторые основные команды fab, которые упрощают работу с этим приложением. Вы видели команду fab runserver . Существует также команда fab shell , которая вызывает интерактивную оболочку iPython в контексте приложения и команду fab syncdb , которая запускает команду syncdb Django для синхронизации изменений в моделях с базой данных.

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

Одной из мощных возможностей Django Rest Framework является встроенная сериализация модели, которую она предлагает. Имея всего несколько строк кода, вы можете создавать мощные представления ваших данных, которые могут быть доставлены в нескольких форматах. Как уже упоминалось ранее, наше приложение будет простым приложением хранения книг и авторов. Я уже создал для вас модели Author and Book , поэтому откройте /app/bookreview/models.py . Уже есть несколько авторов, хранящихся в локальной базе данных SQLite, поэтому давайте откроем интерактивную оболочку для нашего приложения и поработаем. Перейдите в окно терминала, убедитесь, что вы находитесь в ./app и введите следующую команду.

$ fab shell

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

$ from bookreview.models import Author
$ author = Author.objects.get(pk=1) 

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

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