Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

最終更新 Markdown で表示Agent セットアップ

Cloudflare は Workers Example gallery に幅広い Python の例を用意しています。

それに加えて、Python 固有の動作を示す次の例も参照してください。

Worker 内のモジュール

Worker の構成が次のとおりだとします。

├── src
│   ├── module.py
│   └── main.py
├── uv.lock
├── pyproject.toml
└── wrangler.toml

main.pymodule.py をインポートするには、次の import 文を使います。

import module

この場合、wrangler.toml ファイルでメインモジュールは次のように src/main.py に設定されています。

main = "src/main.py"

そのため、import 文で src ディレクトリを指定する必要はありません。

受信リクエストの URL をパースする

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!")

受信リクエストから JSON をパースする

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))

JSON レスポンスを返す

from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        data = {"greeting": "Hello, World!", "status": "ok"}
        return Response.json(data)

Worker 内のバンドル済みアセットファイルを読む

Worker の構成が次のとおりだとします。

├── src
│   ├── file.html
│   └── main.py
└── wrangler.jsonc

Worker 内でファイルを読むには、次のようにします。

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"})

Python Worker からログを出す

# 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!")

Queue に公開する

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"})

D1 Database をクエリする

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 をクエリする を参照してください。

Durable Object

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 のドキュメント を参照してください。

Cron Trigger

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 のドキュメント を参照してください。

Workflows

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 のドキュメント を参照してください。

Hyperdrive で PostgreSQL または MySQL をクエリする

対応ドライバーと例は Python Workers からの Hyperdrive を参照してください。

その他の例

さらに多くの例を探すには、examples リポジトリ をクローンできます。

git clone https://github.com/cloudflare/python-workers-examples

役に立ちましたか?