Продолжение 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 , который является удобной оболочкой JavaScript fetch.

Преимущество 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 и т. д.).