Введение в Sanic
Sanic — это асинхронный веб-фреймворк на Python, созданный для обработки HTTP-запросов с высокой скоростью. Он построен на asyncio
и позволяет писать async def
обработчики, обеспечивая параллельную обработку тысяч соединений. Sanic применяется для создания REST API, микросервисов, real-time-приложений и бэкендов с интенсивной нагрузкой.
Ключевые особенности Sanic
-
Поддержка
async/await
из коробки -
Высокая производительность, сравнимая с Node.js и Go
-
Маршруты, middleware, WebSocket, шаблоны
-
Поддержка CORS, cookie, сессий
-
Простая структура проекта
-
Подходит для масштабируемых API
Установка и начальная настройка
Установка:
Дополнительно:
Создание первого приложения Sanic
Асинхронные маршруты и обработка HTTP-запросов
Работа с параметрами маршрута и query-строкой
Маршрут с параметром:
Query-параметры:
Обработка данных POST и JSON
Form-данные:
Ответы: текст, JSON, HTML, redirect
Обработка ошибок и кастомные исключения
Кастомное исключение:
Middleware и lifecycle-хуки
Middleware:
Работа с cookie, сессиями и заголовками
Обработка файлов и загрузка
Работа с шаблонами (Jinja2)
Шаблон templates/index.html
:
Встроенная поддержка WebSocket
Интеграция с базами данных и ORM
Можно использовать encode/databases
, gino
, sqlalchemy
, ormar
:
Организация структуры проекта
Можно использовать blueprint для разделения модулей:
Тестирование Sanic-приложений
Развёртывание и продакшн-настройки
Команда:
Производственные настройки:
-
Включение
access_log=False
-
workers=4
для многопоточности -
Использование Nginx как reverse-proxy
Примеры практического применения
-
Асинхронные REST API
-
WebSocket-серверы и чаты
-
IoT-платформы
-
Микросервисы
-
Backend для SPA и мобильных приложений
Часто задаваемые вопросы
Что такое Sanic?
Это асинхронный веб-фреймворк на Python, ориентированный на скорость и производительность.
Чем Sanic отличается от Flask?
Sanic полностью поддерживает async/await
, имеет встроенный WebSocket и высокую производительность.
Поддерживает ли Sanic шаблоны?
Да, через расширения и интеграцию с Jinja2.
Подходит ли Sanic для продакшн?
Да, с использованием нескольких воркеров и внешнего сервера.
Какой сервер использовать?
Встроенный сервер Sanic подходит как для dev, так и для prod. Также можно использовать uvicorn с ASGI.
Полный справочник по ключевым функциям и модулям библиотеки Sanic для Python
Основы: запуск приложения и маршруты
Компонент | Описание |
---|---|
Sanic("app_name") |
Создает экземпляр приложения. |
@app.get("/path") , @app.post("/path") |
Декораторы для маршрутов. |
await response.json(...) / text(...) |
Возврат JSON или текстового ответа. |
app.run(host, port, debug=True) |
Запуск приложения. |
Объект запроса (request
)
Свойство / Метод | Описание |
---|---|
request.args |
Query-параметры (dict[str, list[str]] ). |
request.json |
Данные JSON-запроса (dict ). |
request.form |
Данные формы (POST ). |
request.files |
Файлы из формы. |
request.headers |
Заголовки запроса. |
request.cookies |
Куки. |
request.path / request.method |
Путь и метод HTTP. |
Объект ответа (response
)
Функция / Метод | Описание |
---|---|
text("...") |
Текстовый ответ. |
json({...}) |
JSON-ответ. |
html("<html>...</html>") |
HTML-ответ. |
file("path") |
Отправка файла. |
redirect("url") |
Редирект на другой адрес. |
Параметры в URL
Синтаксис | Описание |
---|---|
/user/<name> |
Параметр пути. |
request.path_params['name'] |
Получение значения параметра. |
Middleware
Тип | Описание |
---|---|
@app.middleware("request") |
Выполняется до запроса. |
@app.middleware("response") |
Выполняется после запроса. |
Обработка ошибок
Метод | Описание |
---|---|
@app.exception(ExceptionType) |
Обработка указанного исключения. |
raise SanicException(...) |
Встроенные HTTP-исключения. |
abort(status_code) |
Немедленное завершение запроса. |
Фоновая обработка (Background Tasks)
Компонент | Описание |
---|---|
@app.after_server_start |
Выполняется при запуске сервера. |
@app.before_server_stop |
Выполняется перед остановкой. |
app.ext.add_task(coroutine) |
Добавление фоновой задачи. |