Многие программисты не могут прийти к единственно верному ответу, когда спорят о том, что лучше: язык С+ или 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)


  1. Crait
    08.09.2023 17:12
    +5

    Если вы желаете написать небольшое приложение, у вас ограниченный бюджет и нет серверов для развёртывания тяжёлого фреймворка — выбирайте FastAPI. Так как для маленьких программ использование крупных серверов будет избыточным.

    Было бы интересно подсчитать, какие сервера в каком случае нужны. Предоставьте, если не сложно, фактуру - какие и сколько серверов нужно для FastAPI и Django ?


    1. Hardcoin
      08.09.2023 17:12
      +8

      Кому-то просто нужно было вставить рекламную ссылку, а ссылки без кучи текста вокруг на хабр почему-то не принимают. Вот и решили задачу, как смогли.


    1. LaggerIsME
      08.09.2023 17:12

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


  1. omaxx
    08.09.2023 17:12
    +6

    Что лучше: ворон или письменный стол? У каждого есть свои плюсы и минусы....

    Спасибо за потраченное на статью время


    1. nochkin
      08.09.2023 17:12
      +1

      Но кто вернёт время читателям?


  1. AzamatKomaev
    08.09.2023 17:12
    +5

    В первую очередь вы должны хорошо разбираться в основах программирования на Python. Без фундамента из этого языка вам не удастся изучить Django.

    То есть изучить FastAPI без основ Python можно?

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

    Django - язык запросов? Что?)

    В общем, все что описано для Django применимо и к FastAPI, в частности MVC и примеры приложении, которые могут быть разработаны.

    Похоже, что вся статья была сгенерирована нейросеткой. Смотря на кривой перевод, то возможно что использовали ChatGPT.

    P.S и еще, советую помещать код в тройные обратные апострофы с указанием ЯП


  1. aleks-th
    08.09.2023 17:12
    +5

    Вообще странный обзор и критерии сравнения....

    Ну очень много несостыковок.

    Автор указывает для фастапи в плюсах - Популярность

    В минусах - Небольшое комьюнити

    Как-то кислое с мягким не очень стыкуются.

    ----

    Про DRF автор не в курсе, указав что в Джанго невозможно сделать Rest API.

    Интересно по каким таким критериям определяется параметр гибкость.

    На счёт сложности - субъективно конечно, мне показалось что освоить Джанго совсем не сложно , взял прочитал мануал и работай.

    ---

    Ну и как бы в минусах Джанго автор утверждает что типа нужно основы питона знать - поэтому сложный вход.

    Но Фастапи он тоже на питоне и основы питона и там получается нужно знать...

    В общем странное сравнение мягко говоря.

    Извиняюсь за критику но по глазам это резануло.


  1. Iscander_Che
    08.09.2023 17:12

    Скорее уж FastAPI vs. Flask. А Джанго - это совершенно другой комбайн.


  1. SergeiMinaev
    08.09.2023 17:12

    Django — это язык запросов

    Эм...

    Еще одна виртуозность платформы Django заключается в принципе ее работы.
    Разработчики сайтов при написании кода используют модель DRY

    Хм...

    эту библиотеку используют программисты

    Так Django - фреймворк, язык или библиотека?

    Некоторые из малозаметных функций Django::
    объектно-реляционное отображение (ORM);

    Да уж, ORM - наименее заметная фича, про неё знают единицы.

    SEO-плагины, в частности инструмент robot.txt. Он улучшает поисковую оптимизацию

    Спасибо, вы прям подняли настроение и заставили улыбнуться, и это не сарказм :) Статья по-своему талантлива. Весь текст можно растаскивать на цитаты. Пост 100% заминусуют, поскольку технически он слабоват, но не обращайте на это внимания.


  1. sswwssww
    08.09.2023 17:12
    +1

    Статья была написана нейросетью.


  1. Fox_exe
    08.09.2023 17:12

    На самом деле:

    Django - Это в первую очередь очень мощная админка и ORM, позволяющие легко оперировать данными. Больше подходит для создания полноценного сайта с постоянно меняющейся информацией (блоги/форумы/сбор данных и подобное)

    FastAPI - Примитивный API сервер, как и следует из названия. Его главное назначение - создание простого API сервера - точки обмена данными через JSON, REST или другой протокол. Управление данными сугубо вторично, либо реализуется сторонними средствами.