Cloudflare は Workers Example gallery に幅広い Python の例を用意しています。
それに加えて、Python 固有の動作を示す次の例も参照してください。
Worker の構成が次のとおりだとします。
├── src
│ ├── module.py
│ └── main.py
├── uv.lock
├── pyproject.toml
└── wrangler.tomlmain.py で module.py をインポートするには、次の import 文を使います。
import moduleこの場合、wrangler.toml ファイルでメインモジュールは次のように src/main.py に設定されています。
main = "src/main.py"そのため、import 文で src ディレクトリを指定する必要はありません。
from workers import WorkerEntrypoint, Response
from urllib.parse import urlparse, parse_qs
class Default(WorkerEntrypoint):
async def fetch(self, request):
# Parse the incoming request URL
url = urlparse(request.url)
# Parse the query parameters into a Python dictionary
params = parse_qs(url.query)
if "name" in params:
greeting = "Hello there, {name}".format(name=params["name"][0])
return Response(greeting)
if url.path == "/favicon.ico":
return Response("")
return Response("Hello world!")from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
body = await request.json() # returns a native Python dict
name = body["name"]
return Response("Hello, {name}".format(name=name))from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
data = {"greeting": "Hello, World!", "status": "ok"}
return Response.json(data)Worker の構成が次のとおりだとします。
├── src
│ ├── file.html
│ └── main.py
└── wrangler.jsoncWorker 内でファイルを読むには、次のようにします。
from pathlib import Path
from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
html_file = Path(__file__).parent / "file.html"
return Response(html_file.read_text(), headers={"Content-Type": "text/html"})# To use the JavaScript console APIs
from js import console
from workers import WorkerEntrypoint, Response
# To use the native Python logging
import logging
class Default(WorkerEntrypoint):
async def fetch(self, request):
# Use the console APIs from JavaScript
# https://developer.mozilla.org/en-US/docs/Web/API/console
console.log("console.log from Python!")
# Alternatively, use the native Python logger
logger = logging.getLogger(__name__)
# The default level is warning. We can change that to info.
logging.basicConfig(level=logging.INFO)
logger.error("error from Python!")
logger.info("info log from Python!")
# Or just use print()
print("print() from Python!")
return Response("We're testing logging!")from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
# Bindings are available on the 'env' attribute
# https://developers.cloudflare.com/queues/
# The default contentType is "json"
# We can also pass plain text strings
await self.env.QUEUE.send("hello", contentType="text")
# Send a JSON payload
await self.env.QUEUE.send({"hello": "world"})
return Response.json({"write": "success"})from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
results = await self.env.DB.prepare("PRAGMA table_list").run()
# Return a JSON response
return Response.json(results)新しい D1 データベースの作成と D1 へのバインディング設定まで扱う、より詳しいチュートリアルは Python Workers から D1 をクエリする を参照してください。
from workers import WorkerEntrypoint, Response, DurableObject
class List(DurableObject):
async def get_messages(self):
messages = await self.ctx.storage.get("messages")
return messages if messages else []
async def add_message(self, message):
messages = await self.get_messages()
messages.append(message)
await self.ctx.storage.put("messages", messages)
return
async def say_hello(self):
result = self.ctx.storage.sql.exec(
"SELECT 'Hello, World!' as greeting"
).one()
return result.greeting詳細は Durable Objects のドキュメント を参照してください。
from workers import WorkerEntrypoint
class Default(WorkerEntrypoint):
async def scheduled(self, controller, env, ctx):
# All four parameters (self, controller, env, ctx) are required —
# unlike fetch() which only takes (self, request).
print("cron processed")詳細は Cron Triggers のドキュメント を参照してください。
from workers import WorkflowEntrypoint
class MyWorkflow(WorkflowEntrypoint):
async def run(self, event, step):
@step.do()
async def step_a():
# do some work
return 10
@step.do()
async def step_b():
# do some work
return 20
@step.do(concurrent=True)
async def my_final_step(step_a, step_b):
# should return 30
return step_a + step_b
await my_final_step()詳細は Python Workflows のドキュメント を参照してください。
対応ドライバーと例は Python Workers からの Hyperdrive を参照してください。
さらに多くの例を探すには、examples リポジトリ ↗ をクローンできます。
git clone https://github.com/cloudflare/python-workers-examples