Многие программисты не могут прийти к единственно верному ответу, когда спорят о том, что лучше: язык С+ или Python, писать приложение, обладая навыками программирования, или создать программу из-под коробки. Сегодня этот спор не обошёл и нас: Django или FastAPI? О деталях фреймворков — Анастасия Иванова, технический писатель МТС Exolve (входит в экосистему МТС).
Что это за фреймворк под названием Django
Django появился в 2005 году. Программисты Адриан Головатти и Саймон Уиллсон назвали свой фреймворк Django в честь гитариста-виртуоза Джанго Рейнхардта. Известное имя этой программной платформе дали не просто так.
Как у виртуозного музыканта есть в запасе сотни переходов в проигрываемой мелодии и способов исполнения технически сложных музыкальных транскрипций, так и эта платформа несет в себе все инструменты, необходимые для программиста. В наборе Django вы найдете:
структуру ORM и каталогов;
панель администратора;
HTML-шаблоны;
систему интернационализации, она адаптирует фреймворк к языковым и культурным регионам;
веб-сервер для создания и проверки функциональности приложения вместе с оболочкой внутренней площадки тестирования Python;
инструменты для безопасности продукта от межсайтовых скриптов и взломов пароля.
Django полностью построен на языке программирования Python. Разработчики распространяют эту платформу с открытым исходным кодом. Это лёгкий и быстрый фреймворк. Он предназначен для разработки динамичных сайтов.
Особенности Django
Порог входа к написанию кода на языке программирования Python во фреймворке Django гораздо выше, чем у FastAPI. В первую очередь вы должны хорошо разбираться в основах программирования на Python. Без фундамента из этого языка вам не удастся изучить Django.
Так как Django — это язык запросов, то вы должны уметь работать со списками, кортежами и перебором объектов. Без них у вас возникнут проблемы с наборами запросов.
Функции, декораторы, классы, пакеты — все это вы должны знать, чтобы писать код в Django. Все, перечисленное выше, составляет фундаментальные основы языка программирования Python.
В большинстве случаев молодые разработчики и новички в программировании не хотят заморачиваться изучением всех инструментов Django. Они выбирают более простой и легкий FastAPI.
Архитектура Django построена на независимых частях. Любой модуль можно заменить и модифицировать, не затронув при этом остальные. Модель архитектуру Django построена на трех элементах:
модель. Это совокупность способов и лимитов работы с данными;
представление. Этот элемент показывает разработчику, как отображается информация в зависимости от изменения кода;
контроллер. Он обрабатывает действия программиста и говорит модели, как она должна измениться.
Еще одна виртуозность платформы Django заключается в принципе ее работы. Разработчики сайтов при написании кода используют модель DRY (на англ. Don’t Repeat Yourself, перевод — «Не повторяй себя»). В результате получается сухой программный код, который легко читать и дополнять.
Фреймворк полностью универсален. Это значит, что на нем можно разрабатывать веб-сайты и приложения типа:
видеохостингов;
социальных сетей;
новостных ресурсов.
Эту библиотеку используют программисты из крупных компаний: Pinterest, Spotify, Reddit и YouTube.
Разработчики платформы ежемесячно обновляют ее, проверяют на ошибки, исправляют и стабилизируют ее работу.
Достоинства и недостатки фреймворка Django
Плюсы | Минусы |
Безопасный | Высокий порог входа |
Масштабируемый. Платформа выдерживает большой приток трафика | Не используют для разработки небольших проектов из-за того, что это высокоуровневый фреймворк |
Возможность использования множества плагинов для кастомизации | Нет поддержки множественных запросов. Из-за этого при добавлении большого количества плагинов сайт может работать медленно, потому что будет не хватать скорости обработки множества запросов |
SEO-плагины, в частности инструмент robot.txt. Он улучшает поисковую оптимизацию | Django наиболее прозрачно работает с PostgreSQL и MySQL. С остальными БД функции ORM могут быть менее функциональными. |
Комьюнити, которое помогает программисту во время работы | В отличие от FastAPI этот фреймворк тяжело настроить для разработки программного интерфейса с использованием JSON |
Некоторые из малозаметных функций Django::
объектно-реляционное отображение (ORM);
встроенная система аутентификации;
административный интерфейс для управления данными приложения;
поддержка ПО для обработки запросов и ответов;
система шаблонов для рендеринга HTML-страниц.
Что собой представляет FastAPI
FastAPI — это довольно новая и минималистичная платформа. Она появилась на свет в 2018 году. Фреймворк совместим с версиями Python 3,6 и выше. В отличие от тяжеловесного и объемного Django эта платформа легко разворачивается, ее легче понять новичкам, сделать это можно буквально за один месяц.
База FastAPI строится на двух библиотеках:
Starlette. Это ASGI фреймворк. Он нужен для взаимодействия между приложением клиента и веб-сервером;
Pydantic. Она нужна для описания схем данных.
Фреймворк активно использует декораторы и аннотации, что значительно уменьшает вес и количество шаблонного кода.
Особенности FastAPI
Из особенностей FastAPI выделяют обработку множественных запросов. Платформа выигрывает и в скорости разворачивания проекта. Программист может развернуть свои наработки, уложившись в пять строк кода.
FastAPI предлагает множество различных функций, которые невероятно полезны для создания API:
высокая производительность благодаря асинхронному коду;
автоматическое создание документации API с помощью Swagger UI;
поддержка форматов JSON и OpenAPI;
встроенные инструменты тестирования для модульного и интеграционного тестирования.
Важно: шустрый FastAPI, который по тестам бенчмарка показал превосходство над Django и Flask, считается самым популярным каркасом для создания сервисов REST. Возможность обрабатывать асинхронные запросы — это главное преимущество FastAPI перед остальными фреймворками.
FastAPI используют для работы над программами, где нужна скорость и асинхронная обработка данных. К таким относят:
Netflix;
среды для развертывания машинного обучения.
Достоинства и недостатки фреймворка FastAPI
Плюсы | Минусы |
Популярность | Небольшое комьюнити |
Лёгкость изучения | Малое количество наработок |
Асинхронная обработка | Нет встроенной системы безопасности |
Нет определённых правил, которые бы ограничивали разработчика в написании кода | Мало сторонних плагинов и расширений из-за того, что фреймворк довольно молодой |
Поддержка БД NoSQL | Нет встроенной поддержки для обработки миграции схемы БД. Это важный аспект для менеджмента БД в производственных сферах. Вам придётся подключать сторонние инструменты, такие как Alembic, или систему миграций Django |
Как Django работает с коммуникационными API
Django и FastAPI можно использовать в контексте работы с коммуникационными API вроде МТС Exolve для создания веб-приложений с функциями отправки SMS, мгновенных сообщений (чат), электронной почты и многие другие.
Рассмотрим пример кода для отправки уведомлений с использованием фреймворка Django. Для этого нам понадобится библиотека requests, чтобы отправить POST запрос на API. Пожалуйста, учтите, что это всего лишь базовый пример, и вам может потребоваться дополнительная настройка в зависимости от вашего конкретного случая.
Установите библиотеку requests, если её ещё нет, выполнив команду:
$ -m pip install requests
Создайте Django view, который будет обрабатывать отправку уведомлений:
# Ваш views.py
import json
import requests
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # Отключение CSRF-защиты для упрощения примера, лучше использовать валидацию токена
def send_notification(request):
if request method == 'POST':
# Здесь получите необходимые данные из запроса, например, номер телефона и текст уведомления
phone_number = request.POST.get('phone_number’)
message = request.POST.get(‘message’)
# Замените на ваш URL API
api_url = ‘https://example.com/api/send_notification’
# Замените на ваш токен API
api_token = 'your_api_token_here'
headers
‘Authorization‘: fBearer {apl_token}‘,
‘Content-Type‘:‘application/json’
}
data = {
‘phone_number': phone_number,
‘message’: message
}
response = requests post(api_uri, data=json.dumps(data), headers=headers)
ifresponse status_code == 200:
return JsonResponse({'status’ ‘success’, ‘message’ ‘Notification sent’})
else:
return JsonResponse({‘status’: ‘error’, ‘message’: ‘Falled to send notification’})
retum JsonResponse({‘status’: ‘error’, ‘message’: ’Invalid request method’})
Создаёте URL-маршрут для вашей view:
# Ваш urls.py
from django.uris import path
from . import views
uripatterns = [
path(‘send-notification/’, views.send_notification, name='send-notification’),
# Другие URL-маршруты...
]
Понятно, что можно сделать код короче, но для примера подойдет. Обратите внимание, что вам нужно будет настроить api_url и api_token в соответствии с вашими данными для доступа к API. Также для внедрения SMS API, возможно, вам пригодятся Redis Queue для постановки заданий в очередь, эту библиотеку легко интегрировать в веб-стек.
Не забудьте также добавить необходимую логику для получения данных от клиента и для обработки ошибок. Этот код служит только как отправная точка и требует доработки и тестирования.
Чтобы проиллюстрировать различия между Django и FastAPI, давайте посмотрим, как создать простой API с другим фреймворком:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class HelloRequest(BaseModel):
name: str
@app.post("/hello")
def hello(request: HelloRequest):
return {"message": f"Hello, {request.name}!
В этом примере мы определяем приложение FastAPI с одним маршрутом, который принимает POST-запрос с JSON. Он отвечает сообщением с именем. Как видите, пример FastAPI намного проще, чем у Django, благодаря ориентации на создание API.
Выводы
На GitHub Django заработал 72 000 звезд, а FastAPI — 60 900 звезд. Это можно трактовать как победу Django, несмотря на сложности с изучением и тяжеловесность.
Параметр | Django | FastAPI |
Сложность | − | + |
Гибкость | − | + |
Безопасность | + | − |
Возможность разработки Rest API | − | + |
Если вы желаете написать небольшое приложение, у вас ограниченный бюджет и нет серверов для развёртывания тяжёлого фреймворка — выбирайте FastAPI. Так как для маленьких программ использование крупных серверов будет избыточным.
Для создания мощного и масштабного сервиса и работы с коммуникациями через МТС Exolve подойдёт Django.
Спасибо за уделенное статье время! А как вы считаете, что лучше, Django или FastAPI? Поделитесь своим мнением в комментариях к статье!