В преддверии старта курса "Python Developer. Professional" подготовили традиционный перевод полезной статьи.  Всем привет, в этой статье я расскажу о создании простых асинхронных проектов на фреймворке Sanic. Sanic – это очень похожий на Flask открытый веб-сервер и веб-фреймворк на Python с более чем 10К звездами, который быстро развивается. Он позволяет использовать синтаксис async/await, который был добавлен в Python 3.5, помогая делать ваш код неблокирующим и быстрым. У Sanic очень хорошая документация, которая пишется членами сообщества для самого сообщества. Цель проекта – предложить простой способ запуска высокопроизводительного HTTP-сервера, который легко создавать, расширять и в конечном итоге масштабировать. Перед тем, как начать, давайте установим несколько пакетов и убедимся, что у нас есть все необходимое для создания проекта. Примечание: Исходный код есть на моем github. Каждый шаг отражен в отдельном коммите.  Python3.6+ pipenv (или любой другой установщик пакетов) PostgreSQL (для баз данных, можно также взять MySQL или SQLite) secure – это легкий пакет, который добавляет заголовки безопасности и атрибуты файлов cookie для веб-фреймворков Python. environs – библиотека Python для синтаксического анализа переменных окружения. Она позволяет хранить конфигурацию отдельно от кода, в соответствии с методологией приложения двенадцати факторов. sanic-envconfig – это расширение, которое помогает вам переносить командную строку и переменные окружения в вашу конфигурацию Sanic. databases – это пакет Python, который позволяет создавать запросы с использованием мощного языка выражений SQLAlchemy Core и обеспечивает поддержку PostgreSQL, MySQL и SQLite. Давайте создадим пустой каталог и инициализируем пустой Pipfile. Установите все необходимые пакеты, используя приведенные ниже команды pipenv. Для базы данных: На выбор postgresql, mysql, sqlite. Теперь давайте создадим несколько файлов и папок, где мы будем писать код. Мы будем использовать файл setup.py, чтобы сделать папку project доступной как пакет в нашем коде.   Установка… В файле .env мы будем хранить глобальные переменные, такие как строку подключения к базе данных.  _main_.py создан для того, чтобы наш пакет project мог выполняться из командной строки. Давайте сделаем первый вызов в файле main.py Это начало нашего приложения. Теперь нам нужно создать функцию init в файле main.py. Просто создав app из класса Sanic, мы можем запустить его, указав хост, порт и необязательный аргумент с ключевым словом debug. Запускаем… При успешном запуске приложения Sanic вывод будет выглядеть именно так. Если в браузере вы откроете http://0.0.0.0:8000, то увидите: Error: Requested URL / not found Мы еще не создали никаких маршрутов, так что все в порядке. Мы займемся этим дальше. Теперь мы можем модифицировать среду и настройки. Нам нужно добавить некоторые переменные в файл .env, прочитать их и передать в файл конфигурации приложения Sanic. Файл .env Конфигурация… Файл settings.py Обратите внимание, что я добавил необязательный аргумент auto_reload, который активирует или деактивирует автоматическую перезагрузку. Сейчас самое время настроить базу данных. Одно замечание о базе данных прежде, чем мы пойдем дальше.  Пакет databases использует asyncpg, который является асинхронным интерфейсом библиотеки для работы с PostgreSQL. Работает достаточно быстро. Результаты вы можете посмотреть ниже. Мы будем использовать двух слушателей Sanic, для которых укажем операции подключения и отключения от базы данных. Вот слушатели, которых мы будем использовать: afterserverstart afterserverstop Файл main.py И еще кое-что. Нам нужно указать DB_URL в настройках проекта и среде. Файл .env И файл settings.py: Убедитесь, что DB_URL верный и ваша база данных запущена. Теперь вы можете получить доступ к базе данных с помощью app.db. Более подробную информацию можно получить в следующем разделе. Теперь у нас есть подключение к нашей базе данных, и мы можем попробовать сделать несколько SQL-запросов. Давайте объявим таблицу в файле tables.py с помощью SQLAlchemy. Сейчас я предполагаю, что вы уже сделали миграцию базы данных с таблицей books в ней. Для создания миграций баз данных я рекомендую использовать Alembic – легкий и простой инструмент, который можно использовать вместе с инструментарием базы данных SQLAlchemy для Python. Теперь мы можем использовать любые запросы SQLAlchemy. Ниже представлены несколько примеров. Теперь нам нужно настроить маршруты. Давайте перейдем в routes.py и добавим новый маршрут для books. Конечно же, чтобы все работало, нам нужно в init вызвать setup_routes.  Делаем запрос… Может проверим заголовки ответов и посмотрим, можем ли мы добавить или исправить там что-нибудь? Как видите, в вопросах безопасности нам есть что улучшить. Есть несколько пропущенных заголовков, таких как X-XSS-Protection, Strict-Transport-Security и т.д. Поэтому давайте разберемся с ними с помощью дополнительного ПО и пакетов secure. Файл middlewares.py Настройка middleware в файле main.py: А вот и результат: Как я и обещал в самом начале, для каждого раздела этой статьи есть отдельный репозиторий на github. Надеюсь, этот небольшой туториал поможет вам начать работу с Sanic. В фреймворке Sanic есть еще много неисследованных функций, с ними вы можете познакомиться в документации. Подробнее о курсе. Посмотреть запись открытого урока "Расширение Python на C: заставляем Python ползти быстрее" можно здесь.  Редактор