通过 Pyodide ↗,Python Workers 提供到 JavaScript 的外部函数接口(FFI) ↗。这允许你:
- 使用绑定(binding)访问 Cloudflare 上的资源,包括 Workers AI、Vectorize、R2、KV、D1、Queues、Durable Objects、服务绑定(Service Bindings) 等。
- 使用 JavaScript 全局对象,如
Request、Response和fetch()。 - 使用 Cloudflare Workers 的完整功能集——如果 API 在 JavaScript 中可访问,你也可以在 Python Worker 中访问它,完全使用 Python 代码编写。
Pyodide 外部函数接口的详细信息记录在此处 ↗,用 Python 编写的 Workers 能够充分利用这一点。
绑定(binding)允许 Worker 与 Cloudflare 开发者平台上的资源交互。在 Worker 上声明绑定时,你授予它特定的能力,例如能够读写 R2 存储桶中的文件。
例如,要从 Python Worker 访问 KV 命名空间,你需要在 Worker 的 Wrangler 配置文件中声明以下内容:
{
"main": "./src/index.py",
"kv_namespaces": [
{
"binding": "FOO",
"id": "<YOUR_KV_NAMESPACE_ID>"
}
]
}main = "./src/index.py"
[[kv_namespaces]]
binding = "FOO"
id = "<YOUR_KV_NAMESPACE_ID>"...然后在 env 上暴露的绑定对象上调用 .get():
from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
await self.env.FOO.put("bar", "baz")
bar = await self.env.FOO.get("bar")
return Response(bar) # returns "baz"有时,为了与 JavaScript API 互操作,你可能需要将 Python 对象转换为 JavaScript。Pyodide 提供 to_js 函数来促进这种转换。
from js import Object
from pyodide.ffi import to_js as _to_js
from workers import WorkerEntrypoint, Response
# to_js converts between Python dictionaries and JavaScript Objects
def to_js(obj):
return _to_js(obj, dict_converter=Object.fromEntries)有关更多详情,请参阅 pyodide.ffi.to_js 文档 ↗。
我们建议使用 workers 模块(由我们的 workers-runtime-sdk 包提供)以更符合 Python 风格的方式访问 JavaScript 全局对象。
但是,如果出于任何原因需要直接访问 JavaScript 全局对象,你可以从 js 模块导入它们。
例如,请注意在下面的示例中 Response 是如何从 js 导入的:
from workers import WorkerEntrypoint
from js import Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
return Response.new("Hello World!")请参阅 Python 示例,了解如何从 Python 调用 JavaScript 函数,包括 console.log 和日志记录、为 Response 提供选项以及解析 JSON。