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 —
от моделей до проверки работоспособности
Солиев Бахромжон Набиджонович,
Старший преподаватель Ферганского филиала Ташкентского университета информационных технологий имени Мухаммада аль-Хорезми [email protected]
Аннотация. В данной публикации мы изучим применение 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
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