コンテンツにスキップ

Cloudflareには、Workers Example galleryに多くのPythonの例があります。

これらの例に加えて、Python特有の動作を示す以下の例を考慮してください。

受信リクエストURLの解析

from js import Response
from urllib.parse import urlparse, parse_qs
async def on_fetch(request, env):
# 受信リクエストURLを解析
url = urlparse(request.url)
# クエリパラメータをPythonの辞書に解析
params = parse_qs(url.query)
if "name" in params:
greeting = "こんにちは、{name}".format(name=params["name"][0])
return Response.new(greeting)
if url.path == "/favicon.ico":
return Response.new("")
return Response.new("こんにちは、世界!")

受信リクエストからJSONを解析

from js import Response
async def on_fetch(request):
name = (await request.json()).name
return Response.new("こんにちは、{name}".format(name=name))

Python Workerからログを出力

# JavaScriptコンソールAPIを使用するために
from js import console, Response
# ネイティブPythonロギングを使用するために
import logging
async def on_fetch(request):
# JavaScriptのコンソールAPIを使用
# https://developer.mozilla.org/en-US/docs/Web/API/console
console.log("Pythonからのconsole.log!")
# または、ネイティブPythonロガーを使用
logger = logging.getLogger(__name__)
# デフォルトレベルはwarningです。これをinfoに変更できます。
logging.basicConfig(level=logging.INFO)
logger.error("Pythonからのエラー!")
logger.info("Pythonからの情報ログ!")
# または単にprint()を使用
print("Pythonからのprint()!")
return Response.new("ログ出力をテストしています!")

キューに公開

from js import Response, Object
from pyodide.ffi import to_js as _to_js
# to_jsはPythonの辞書とJavaScriptのオブジェクトの間で変換します
def to_js(obj):
return _to_js(obj, dict_converter=Object.fromEntries)
async def on_fetch(request, env):
# バインディングは'env'パラメータで利用可能です
# https://developers.cloudflare.com/queues/
# デフォルトのcontentTypeは"json"です
# プレーンテキスト文字列も渡すことができます
await env.QUEUE.send("hello", contentType="text")
# JSONペイロードを送信
await env.QUEUE.send(to_js({"hello": "world"}))
# レスポンスを返す
return Response.json(to_js({"write": "success"}))

D1データベースをクエリ

from js import Response
async def on_fetch(request, env):
results = await env.DB.prepare("PRAGMA table_list").all()
# JSONレスポンスを返す
return Response.json(results)

新しいD1データベースを作成し、D1へのバインディングを構成する方法についての詳細なチュートリアルは、Query D1 from Python Workersを参照してください。

次のステップ