Продолжение PyScript — новый способ создания HTML-сайтов.
PyScript — создание HTTP-запросов — лучший подход | Руководство
Пошаговое руководство, которое познакомит вас с HTTP-запросами с помощью PyScript.
Выполнение запросов в PyScript — горячая тема, поскольку популярный модуль Python requests
не поддерживается в Pyodide. К счастью, есть другие способы выполнять HTTP-запросы в PyScript.
Метод № 1 — использование pyfetch от Pyodide (лучший подход)
Поскольку PyScript построен на основе pyodide, вы можете использовать любой API от pyodide.
Но... что такое pyfetch на самом деле?
Согласно документации pyodide, pyfetch — это оболочка выборки JavaScript.
Pyodide предоставляет
pyodide.http.pyfetch
, который является удобной оболочкой JavaScriptfetch
.
Преимущество fetch в сравнении с неподдерживаемым модулем requests Python, заключается в том, чтоfetch
является асинхронным.
основная проблема заключается в том, что
requests
является синхронным, тогда какfetch
является асинхронным. Можно выполнять синхронные вызовы с помощьюXMLHttpRequest
, но он не поддерживает многие параметры и не очень эффективен.
Давайте посмотрим на определение pyodide.http.pyfetch
async http.pyfetch(url: str, **kwargs) → pyodide.http.FetchResponse
В документации отмечается, что **kwargs
может быть любым из необязательных параметров, используемых для Javascript's Fetch API.
В эти параметры входят body
, headers
, method
from pyodide.http import pyfetch import asyncio response = await pyfetch(url="https://jsonplaceholder.typicode.com/todos/1", method="GET") output = f"GET request=> status:{response.status}, json:{await response.json()}"
Самое главное здесь то, что вы должны импортировать пакет asyncio
, иначе вы получите странные ошибки. Эта недокументированная деталь беспокоила меня несколько часов. К счастью, я нашел отличную статью, которая мне помогла. Надеюсь, это уже будет исправлено, когда вы будете читать эту статью.
полностью работающий пример HTTP GET
запроса с использованием pyfetch
:
Способ №2 — XMLHttpRequest
и другие функции JS
Второй подход к выполнению запросов HTTP в PyScript заключается в использовании других функций JavaScript. Вы можете вызвать любую функцию/объект javascript в PyScript с помощью модуля JS. (для примеров Доступ к HTML DOM и событиям с помощью модуля JS нажмите здесь).
from js import XMLHttpRequest req = XMLHttpRequest.new() req.open("GET", "https://jsonplaceholder.typicode.com/todos/1", False) req.send(None) output = str(req.response)
Имейте в виду, что если вы используете
XMLHttpRequest
таким образом, вам нужно сделать веб-запрос, который имеет фактический необработанный вывод /json. Если нет, появится ошибка CORS, вы можете отключить это в своем браузере, если хотите.
полностью работающий пример HTTP GET
запроса с использованием XMLHttpRequest
:
Заключение
В заключение, запросы в PyScript
PyScript не так уж сложны в освоении. Это всего лишь оболочка существующих JavaScript
функций.
Я не хочу вдаваться в подробности здесь, ключевая идея заключается в том, что вы можете делать HTTP GET / POST / etc запросы в PyScript
, как обычно делаете в JavaScript
. Если вы хотите узнать больше об JavaScript API, я предлагаю вам предварительно ознакомиться с документацией.
Спасибо, что прочитали эту статью. Если вы хотите углубиться в PyScript, подпишитесь на меня. Вскоре я напишу больше расширенных руководств по PyScript, включаяновейшие элементы в PyScript (py-inputbox, py- box, py-button, py-register-widget и т. д.).