Asgi это новый WSGI , с асинхронный Flair. Asgi возникает как новый стандарт для асинхронных веб-приложений Python. Поскольку веб-приложения проводят много времени ожидания, Async Web Apps составляют много смысла и иметь Значительное повышение производительности над синхронными приложениями. Скорость
К счастью, Asgi Frameworks, как Starlette , Кварты , Каналы Django и Blacksheep существует. С любым из них ваш высокопроизводительный веб-приложение Python может быть запущенным стабильно и быстро.
Но если вы бросаетесь, делаете сам, презрение к абстракциям, самостоятельному, усталости от дефирации своего рода разработчика, то вы хотите заглянуть под капот.
Двигатель
"""A barebones ASGI app that dumps scope.""" import pprint def pretty_html_bytes(obj): """Pretty print a Python object intags.""" pp = pprint.PrettyPrinter(indent=2, width=256) prettified = pp.pformat(obj) return f"{prettified}".encode() async def app(scope, receive, send): """The simplest of ASGI apps, displaying scope.""" headers = [(b"content-type", b"text/html")] body = pretty_html_bytes(scope) await send({"type": "http.response.start", "status": 200, "headers": headers}) await send({"type": "http.response.body", "body": body}) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
Запустите вышеупомянутое, откройте окно браузера с помощью http://localhost: 8000 , и вы должны увидеть свалку Asgi App’s объем
. В то время как Область применения [«Путь»]
вероятно, самый интересный (измените путь и посмотрите, что изменение стоимости), Область применения [«Клиент»]
, Область применения [«Схема»]
И другие также интересны.
Вы также можете попробовать ref.it. Я сделал с вышеуказанным кодом.
Настроить
Попробуйте изменить тело, но убедитесь, что он находится в байтах, а не строка. Упоминание .encode. ()
, например, в my_string.encode ()
обычно преобразуют строку в байты в правильном этапе. Вы можете сделать символ, кодируя явную с my_string.encode ("UTF-8")
Отказ
Добавьте немного маршрутизации с различными Если прицел [«Путь»]:
и Элиф
, так далее. Используйте еще
Чтобы поймать пути, которые не совпадают, изменяя статус до 404.
Статический обработчик тоже вариант. Я обычно размещаю статические активы, такие как CSS, JavaScript и изображения в определенной иерархии каталога. Например, Если прицел [«Путь»]. Startswith ("/Активы/"):
делает хорошее начало. Затем откройте и прочитайте файл, устанавливая тело на прочитанные байты.
Вы также можете попробовать другие серверы ASGI в дополнение к Увикурн : Гиперкорн и Дафна Отказ Я также писал Сводная статья обо всех трех Отказ
Наслаждаться! Вот почему Python имеет такое пролиферацию веб-каркасов. Легко начать и зацепить.
Оригинал: “https://dev.to/bowmanjd/write-your-own-python-async-asgi-app-no-framework-needed-1296”