Научная статья на тему 'Путеводитель по построению веб-API на Django Шаг за шагом с Django REST framework — от моделей до проверки работоспособности'

Путеводитель по построению веб-API на Django Шаг за шагом с Django REST framework — от моделей до проверки работоспособности Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
94
32
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
Django REST framework / Web API / Django фреймворк / Веб-сервисы / Сериализация данных / Аутентификация / авторизация / URL-маршрутизация / Валидация данных / Документация API / Django REST framework / Web API / Django framework / Web services / Data serialization / Authentication / authorization / URL routing / Data validation / API documentation

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Солиев Бахромжон Набиджонович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

A Guide to Building a Web API with Django Step by step with the Django REST framework from models to sanity checks

In this post, we will explore the use of the Django REST framework for developing web APIs in the context of the Django framework. Let's look at the basic steps for setting up a project, creating endpoints, authenticating users, and using tools for processing and validating data.

Текст научной работы на тему «Путеводитель по построению веб-API на Django Шаг за шагом с Django REST framework — от моделей до проверки работоспособности»

Muhammad al-Xorazmiy nomidagi TATU Farg'ona filiali "Al-Farg'oniy avlodlari" elektron ilmiy jurnali ISSN 2181-4252 Tom: 1 | Son: 4 | 2023-yil

"Descendants of Al-Farghani" electronic scientific journal of Fergana branch of TATU named after Muhammad al-Khorazmi. ISSN 2181-4252 Vol: 1 | Iss: 4 | 2023 year

Электронный научный журнал "Потомки Аль-Фаргани" Ферганского филиала ТАТУ имени Мухаммада аль-Хоразми ISSN 2181-4252 Том: 1 | Выпуск: 4 | 2023 год

Путеводитель по построению веб-API на Django - Шаг за шагом с Django REST framework —

от моделей до проверки работоспособности

Солиев Бахромжон Набиджонович,

Старший преподаватель Ферганского филиала Ташкентского университета информационных технологий имени Мухаммада аль-Хорезми bahromjonsoliev@gmail.com

Аннотация. В данной публикации мы изучим применение Django REST framework для разработки веб-API в контексте фреймворка Django. Рассмотрим основные шаги по настройке проекта, созданию эндпоинтов, аутентификации пользователей, а также использованию инструментов для обработки и валидации данных.

Ключевые слова. Django REST framework, Web API, Django фреймворк, Веб-сервисы, Сериализация данных, Аутентификация, авторизация, URL-маршрутизация, Валидация данных, Документация API

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

сосредоточиться на бизнес-задачах, минуя необходимость беспокоиться о технических аспектах там, где это возможно. Нужно создать кнопку на веб-сайте? Авторизовать пользователя или восстановить пароль? Сохранить данные пользователя из веб-формы в базу данных? Все уже готово — просто используйте!

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

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

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

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

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

• Модель (хранение данных пользователя)

• Представление (отображение данных пользователя)

• Контроллер (обработка изменений данных от пользователя).

В контексте Django, данная терминология может звучать немного иначе, но суть остается неизменной. Разработка Django началась в 2003 году под руководством программистов Адриана Холовати и Саймона Уиллисона, а первый публичный релиз состоялся в 2005 году. Функционал фреймворка тщательно

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

Несмотря на то, что Django считается обширным и многофункциональным

фреймворком, сам по себе он не всегда способен

166

Muhammad al-Xorazmiy nomidagi TATU Farg'ona filiali "Al-Farg'oniy avlodlari" elektron ilmiy jurnali ISSN 2181-4252 Tom: 1 | Son: 4 | 2023-yil

"Descendants of Al-Farghani" electronic scientific journal of Fergana branch of TATU named after Muhammad al-Khorazmi. ISSN 2181-4252 Vol: 1 | Iss: 4 | 2023 year

Электронный научный журнал "Потомки Аль-Фаргани" Ферганского филиала ТАТУ имени Мухаммада аль-Хоразми ISSN 2181-4252 Том: 1 | Выпуск: 4 | 2023 год

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

Рис 1. Связь между пользователем и сервером

На сегодняшний момент архитектура Интернета оперирует по принципу взаимодействия Клиента и Сервера. Клиент инициирует запрос, а Сервер предоставляет ответ(рис 1). В случае общения двух Серверов, принято условно называть тот, который отправляет запрос и ожидает ответа, Клиентом, а тот, который принимает запрос и предоставляет ответ, Сервером. Взаимодействие между браузерами и веб-сайтами, где браузеры действуют в роли Клиента, а веб-сайты в роли

Сервера, традиционно осуществлялось с использованием html-рендеринга - именно таким образом работал Django в своем начале. Для получения данных с веб-сайта браузер направляет GET-запрос к Серверу, тот формирует ответ в виде html-страницы и передает ее браузеру. Однако, как браузер может передавать данные Серверу?

В html-странице Сервер внедряет все необходимые веб-формы, заполнив которые, пользователь может передать свои данные обратно на сервер. Когда вы вводите свои данные в форму на сайте, браузер отправляет Серверу POST-запрос, содержащий ваши данные. Сервер обрабатывает их и записывает в базу данных.

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

Браузерные приложения научились самостоятельно отрисовывать веб-страницы,

167

Muhammad al-Xorazmiy nomidagi TATU Farg'ona filiali "Al-Farg'oniy avlodlari" elektron ilmiy jurnali ISSN 2181-4252 Tom: 1 | Son: 4 | 2023-yil

"Descendants of Al-Farghani" electronic scientific journal of Fergana branch of TATU named after Muhammad al-Khorazmi. ISSN 2181-4252 Vol: 1 | Iss: 4 | 2023 year

Электронный научный журнал "Потомки Аль-Фаргани" Ферганского филиала ТАТУ имени Мухаммада аль-Хоразми ISSN 2181-4252 Том: 1 | Выпуск: 4 | 2023 год

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

Django REST framework (DRF) - это мощный фреймворк для создания веб-API на основе Django. Он предоставляет набор инструментов для быстрого и удобного создания RESTful API веб-приложений с использованием языка программирования Python.

Вот некоторые ключевые особенности Django REST framework:

Сериализация данных: DRF предоставляет мощные инструменты для преобразования объектов Django в JSON-подобные данные и обратно. Это называется сериализацией.

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

Просмотры (Views): DRF предоставляет множество предварительно настроенных просмотров для обработки различных типов запросов. Они организованы вокруг классов, что делает их мощными и гибкими.

URL-маршрутизация: DRF предоставляет инструменты для определения URL-маршрутов для ваших эндпоинтов API.

Поддержка разных форматов: DRF поддерживает различные форматы данных, такие как JSON, XML, YAML и другие.

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

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

Расширяемость: Вы можете легко расширять функциональность DRF, создавая свои собственные классы сериализаторов, просмотров и других компонентов.

Поддержка аутентификации через сторонние сервисы (OAuth, JWT и др.): DRF интегрируется с различными методами аутентификации для обеспечения безопасности вашего API.

Документация: DRF поставляется с автоматической интерактивной документацией API, которая облегчает понимание и использование вашего API.

Результаты. Давайте рассмотрим Django Rest Framework на конкретных примерах ниже.

Шаг 1: Установка Django REST framework

Первым этапом следует произвести установку Django REST framework. Процедуру установки можно выполнить при помощи инструмента pip:

pip install djangorestframework

Шаг 2: Инициализация Django-проекта

Для начала создания проекта Django, выполните следующую команду:

django-admin startproject myproject

Шаг 3: Создание приложения Django

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

python manage.py startapp my_app

Шаг 4: Настройка Django REST framework

INSTALLEDAPPS = [

'rest_framework', 'my_app',

]

168

"Descendants of Al-Farghani" electronic scientific Электронный научный журнал "Потомки Аль-

joumal of Fergana branch of TATU named after Фаргани" Ферганского филиала ТАТУ имени

Muhammad al-Khorazmi. ISSN 2181-4252 Мухаммада аль-Хоразми ISSN 2181-4252

Vol: 1 | Iss: 4 | 2023 year Том: 1 | Выпуск: 4 | 2023 год

Muhammad al-Xorazmiy nomidagi TATU Farg'ona filiali "Al-Farg'oniy avlodlari" elektron ilmiy jurnali ISSN 2181-4252 Tom: 1 | Son: 4 | 2023-yil

Надо добавить REST framework middleware в MIDDLEWARE в файле settings.py:

MIDDLEWARE = [

'rest_framework.middleware.AuthenticationMiddlew are',

'rest_framework.middleware.AuthorizationMiddlewa re',

]

Шаг 5: Определение модели в Django

Создайте модель Django, описав ее структуру в файле models.py вашего приложения:

from django.db import models

class Product(models.Model): pr_name =

models.CharField(max_length=100)

prdescription = models.TextField() pr_price =

models.DecimalField(max_digits=10, decimal_places=2)

prcreatedat =

models.DateTimeField(auto_now_add=True)

pr_updated_at =

models.DateTimeField(auto_now=True)

def str_(self):

return self.name

Шаг 6: Определение сериализатора в Django REST framework

В Django REST framework определение сериализатора происходит путем создания класса, который наследуется от одного из классов-сериализаторов, предоставляемых фреймворком. Основные классы-сериализаторы включают serializers.Serializer и serializers.ModelSerializer.

1. serializers.Serializer:

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

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

Пример:

from restframework import serializers

class MySerializer(serializers.Serializer): fieldl = serializers.CharField() field2 = serializers.IntegerField()

2. serializers.ModelSerializer:

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

Пример:

from rest_framework import serializers

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

from .models import MyModel

class

MyModelSerializer(serializers.ModelSerializer): class Meta:

model = MyModel fields = '__all__ '

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

Теперь создадим сериализатор в Django REST framework, описав его в файле serializers.py в приложения:

from rest_framework import serializers

from my app.models import Product

169

Muhammad al-Xorazmiy nomidagi TATU Farg'ona filiali "Al-Farg'oniy avlodlari" elektron ilmiy jurnali ISSN 2181-4252 Tom: 1 | Son: 4 | 2023-yil

"Descendants of Al-Farghani" electronic scientific journal of Fergana branch of TATU named after Muhammad al-Khorazmi. ISSN 2181-4252 Vol: 1 | Iss: 4 | 2023 year

Электронный научный журнал "Потомки Аль-Фаргани" Ферганского филиала ТАТУ имени Мухаммада аль-Хоразми ISSN 2181-4252 Том: 1 | Выпуск: 4 | 2023 год

class

ProductSerializer(serializers.ModelSerializer): class Meta:

model = Product

fields = ['id', ' pr_name', ' pr_description', ' pr_price', ' pr_created_at', ' pr_updated_at']

Шаг 7: Определение представления в Django REST framework

Создайте представление в Django REST framework, описав его в файле views.py вашего приложения:

from rest_framework import generics from myapp.models import Product from myapp.serializers import

ProductSerializer

class

ProductList(generics.ListCreateAPIView): queryset = Product.objects.all() serializer_class = ProductSerializer

class

ProductDetail(generics.RetrieveUpdateDestroyAPIV iew):

queryset = Product.objects.all() serializer_class = Product

Шаг 8: Настройка маршрутов Django REST framework

Определите маршруты Django REST framework в файле urls.py вашего приложения:

from django.urls import path from myapp.views import ProductList, ProductDetail

urlpatterns = [ path('products/', ProductList.as_view(), name= 'product-list'),

path('products/<int:pk>/',

ProductDetail.as_view(), name= 'product-detail'), ]

Шаг 9: Запуск приложения Django Запустите приложение Django с помощью команды:

python manage.py runserver

Шаг 10: Проверка работоспособности Web

API

Запустите веб-браузер и перейдите по адресу http://127.0.0.1:8000/products/. Здесь вы должны увидеть список всех доступных продуктов.

Для добавления нового продукта выполните POST-запрос на http://127.0.0.1:8000/products/ с

передачей данных в формате JSON: {

"pr_name ": "Product 1", "prdescription ": "Description for Product

1",

"prpice": 10.99

}

Чтобы получить детали конкретного продукта, отправьте GET-запрос на http://127.0.0.1:8000/products/1/, где 1 -идентификатор продукта.

Чтобы обновить продукт, отправьте PUT-запрос на http://127.0.0.1:8000/products/1/ с

данными в формате JSON: {

"pr_name ": " Updated Product 1", "pr description": "Updated Description for Product 1",

"pr_price ": 12.99

}

Чтобы удалить продукт, отправьте DELETE-запрос на http://127.0.0.1:8000/products/1/.

Заключение. В данной статье мы изучили процесс использования Django REST framework для формирования веб-API в контексте Django. Фреймворк предоставляет удобные инструменты для разработки RESTful API, включая возможности по аутентификации, авторизации, сериализации,

170

Muhammad al-Xorazmiy nomidagi TATU Farg'ona filiali "Al-Farg'oniy avlodlari" elektron ilmiy jurnali ISSN 2181-4252 Tom: 1 | Son: 4 | 2023-yil

"Descendants of Al-Farghani" electronic scientific journal of Fergana branch of TATU named after Muhammad al-Khorazmi. ISSN 2181-4252 Vol: 1 | Iss: 4 | 2023 year

Электронный научный журнал "Потомки Аль-Фаргани" Ферганского филиала ТАТУ имени Мухаммада аль-Хоразми ISSN 2181-4252 Том: 1 | Выпуск: 4 | 2023 год

валидации и многие другие функции. Благодаря Django REST framework вы можете эффективно создавать мощные и гибкие веб-API на основе Django.

Использованная литература

1. Soliev B. N., kizi Abdurasulova D. B., Yakubov M. S. USING GINJA TEMPLATES TO CREATE E-COMMERCE PLATFORMS //Publishing House "Baltija Publishing". - 2023.

2. Elevating E-Commerce in Uzbekistan with Python. (2023). Journal of Technical Research and Development, 1(1), 43-45. https://jtrd.mcdir.me/index.php/jtrd/article/view/2

3. Navigating the E-Commerce Landscape in Uzbekistan with Python. (2023). Journal of Technical Research and Development, 1(1), 46-50. https://jtrd.mcdir.me/index.php/jtrd/article/view/1

4. Uzbekistan's Digital Market: Python's ECommerce Impact. (2023). Journal of Technical Research and Development, 1(1), 58-61. https://jtrd.mcdir.me/index.php/jtrd/article/view/5

5. Python's Role in Revolutionizing E-Commerce in Uzbekistan. (2023). Journal of Technical Research and Development, 1(1), 51-54. https://jtrd.mcdir.me/index.php/jtrd/article/view/4

6. Nabijonovich S. B. EMPOWERING VIDEO ANALYTICS WITH AI-DRIVEN TEXT RECOGNITION IN PYTHON FOR STREAMLINED INSIGHTS //Galaxy International Interdisciplinary Research Journal. - 2023. - Т. 11. - №. 11. - С. 25-30.

7. https://letslearnabout.net/blog/what-is-django-rest-framework-and-why-you-should-learn-it/

8. https://mkdev.me/ru/posts/chto-takoe-django-rest-framework

171

i Надоели баннеры? Вы всегда можете отключить рекламу.