Многие программисты не могут прийти к единственно верному ответу, когда спорят о том, что лучше: язык С+ или 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? Поделитесь своим мнением в комментариях к статье!
Комментарии (11)
AzamatKomaev
08.09.2023 17:12+5В первую очередь вы должны хорошо разбираться в основах программирования на Python. Без фундамента из этого языка вам не удастся изучить Django.
То есть изучить FastAPI без основ Python можно?
Так как Django — это язык запросов, то вы должны уметь работать со списками, кортежами и перебором объектов. Без них у вас возникнут проблемы с наборами запросов.
Django - язык запросов? Что?)
В общем, все что описано для Django применимо и к FastAPI, в частности MVC и примеры приложении, которые могут быть разработаны.
Похоже, что вся статья была сгенерирована нейросеткой. Смотря на кривой перевод, то возможно что использовали ChatGPT.
P.S и еще, советую помещать код в тройные обратные апострофы с указанием ЯП
aleks-th
08.09.2023 17:12+5Вообще странный обзор и критерии сравнения....
Ну очень много несостыковок.
Автор указывает для фастапи в плюсах - Популярность
В минусах - Небольшое комьюнити
Как-то кислое с мягким не очень стыкуются.
----
Про DRF автор не в курсе, указав что в Джанго невозможно сделать Rest API.
Интересно по каким таким критериям определяется параметр гибкость.
На счёт сложности - субъективно конечно, мне показалось что освоить Джанго совсем не сложно , взял прочитал мануал и работай.
---
Ну и как бы в минусах Джанго автор утверждает что типа нужно основы питона знать - поэтому сложный вход.
Но Фастапи он тоже на питоне и основы питона и там получается нужно знать...
В общем странное сравнение мягко говоря.
Извиняюсь за критику но по глазам это резануло.
SergeiMinaev
08.09.2023 17:12Django — это язык запросов
Эм...
Еще одна виртуозность платформы Django заключается в принципе ее работы.
Разработчики сайтов при написании кода используют модель DRYХм...
эту библиотеку используют программисты
Так Django - фреймворк, язык или библиотека?
Некоторые из малозаметных функций Django::
объектно-реляционное отображение (ORM);Да уж, ORM - наименее заметная фича, про неё знают единицы.
SEO-плагины, в частности инструмент robot.txt. Он улучшает поисковую оптимизацию
Спасибо, вы прям подняли настроение и заставили улыбнуться, и это не сарказм :) Статья по-своему талантлива. Весь текст можно растаскивать на цитаты. Пост 100% заминусуют, поскольку технически он слабоват, но не обращайте на это внимания.
Fox_exe
08.09.2023 17:12На самом деле:
Django - Это в первую очередь очень мощная админка и ORM, позволяющие легко оперировать данными. Больше подходит для создания полноценного сайта с постоянно меняющейся информацией (блоги/форумы/сбор данных и подобное)
FastAPI - Примитивный API сервер, как и следует из названия. Его главное назначение - создание простого API сервера - точки обмена данными через JSON, REST или другой протокол. Управление данными сугубо вторично, либо реализуется сторонними средствами.
Crait
Если вы желаете написать небольшое приложение, у вас ограниченный бюджет и нет серверов для развёртывания тяжёлого фреймворка — выбирайте FastAPI. Так как для маленьких программ использование крупных серверов будет избыточным.
Было бы интересно подсчитать, какие сервера в каком случае нужны. Предоставьте, если не сложно, фактуру - какие и сколько серверов нужно для FastAPI и Django ?
Hardcoin
Кому-то просто нужно было вставить рекламную ссылку, а ссылки без кучи текста вокруг на хабр почему-то не принимают. Вот и решили задачу, как смогли.
LaggerIsME
Это еще звучит, как какой-то минус того, что FastAPI является более легковесным и производительным, чем Django...