Рубрики
Без рубрики

Напишите свой собственный веб-приложение Python Async Asgi, никаких рамках не требуется

ASGI – это новый WSGI, с асинхронным талантом. Asgi возникает как новый стандарт для асинхронных … Теги с Python, Asgi.

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 in 
 tags."""
    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”