datasette-cors 作者 simonw

星标

README 源代码

datasette-cors

PyPI Tests Changelog License

配置 CORS 头的 Datasette 插件,基于 asgi-cors

你可以使用此插件允许在允许列表中的一组域上运行的 JavaScript 对你的 Datasette 实例提供的 JSON API 发起 fetch() 调用。

安装

datasette install datasette-cors

配置

你需要添加一些插件配置才能使此插件生效。

要将特定域添加到允许列表,请使用此配置:

{
    "plugins": {
        "datasette-cors": {
            "hosts": ["https://www.example.com"]
        }
    }
}

这会影响 access-control-allow-origin 头。

你也可以像这样将主机模式添加到允许列表:

{
    "plugins": {
        "datasette-cors": {
            "host_wildcards": ["https://*.example.com"]
        }
    }
}

要允许所有来源,请使用此配置:

{
    "plugins": {
        "datasette-cors": {
            "allow_all": true
        }
    }
}

这会将 access-control-allow-origin 头设置为 *

你可以使用 headers 选项指定允许的头 - 即通过设置 access-control-allow-headers 头:

{
    "plugins": {
        "datasette-cors": {
            "allow_all": true,
            "headers": ["Authorization", "Content-Type"]
        }
    }
}

要通过 access-control-allow-methods 头允许特定的 HTTP 方法,请使用 methods 选项:

{
    "plugins": {
        "datasette-cors": {
            "allow_all": true,
            "methods": ["GET", "POST", "OPTIONS"]
        }
    }
}

你可以使用 max_age 选项设置 access-control-max-age 头:

{
    "plugins": {
        "datasette-cors": {
            "allow_all": true,
            "max_age": 3600
        }
    }
}

测试

要测试此插件,请将上述示例之一保存为 metadata.json 并在本地运行:

datasette -m metadata.json

对于 Datasette 1.0,请改用 -c config.json,或尝试此命令:

datasette -s plugins.datasette-cors.allow_all true

现在在你的浏览器中访问 https://www.example.com/,打开浏览器开发者控制台并粘贴以下代码:

r.json()).then(console.log)">
fetch("http://127.0.0.1:8001/_memory.json?sql=select+sqlite_version%28%29").then(r => r.json()).then(console.log)

如果插件正常工作,你将在控制台中看到 JSON 响应输出。