跳转到内容
搜索文档

外部函数接口(FFI)

最后更新 查看 MarkdownAgent 设置

通过 Pyodide,Python Workers 提供到 JavaScript 的外部函数接口(FFI)。这允许你:

Pyodide 外部函数接口的详细信息记录在此处,用 Python 编写的 Workers 能够充分利用这一点。

从 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"

将 Python 转换为 JavaScript

有时,为了与 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 文档

从 Python Workers 使用 JavaScript 全局对象

我们建议使用 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。

这篇文档对您有帮助吗?