配置 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 响应输出。