首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许mkdocs中的AJAX端点

如何允许mkdocs中的AJAX端点
EN

Stack Overflow用户
提问于 2022-03-30 05:18:21
回答 1查看 86关注 0票数 1

可视化是在本地AJAX服务器驱动的mkdocs中获取这工作

这个例子很难举例,但我会的。在我这么做之前,问题是我想使用各种ajax端点来驱动MkDocs中的Vega可视化。但我遇到了CORS许可。

代码语言:javascript
复制
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://machine1:8080/dataflare. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 200.

我很难找到关于如何解决这个问题的文档,所以,有人知道我们如何在mkdocs中启用它吗?

该示例很长,但在使用本地数据源(而不是vega数据 )之前,这是可行的。当您将AJAX端点从"url": "https://vega.github.io/vega/data/flare.json"更改为http://myhost:8080/shortflare (或fullflare端点)时,您将得到上述CORS权限错误。

因此,客户端mkdocs应该启用端点作为安全的跨站点源,还是应该将AJAX瓶发送一个CORS头呢?我不明白为什么最初的AJAX在瓶子端点不工作的情况下工作。

现在是最难的部分。展示了一个例子.

这个简单的瓶服务器将是原始火焰数据的AJAX端点模仿:

  • 数据样本在http://myhost:8080/shortflare
  • 完整数据集http://myhost:8080/fullflare通过来自https://vega.github.io/vega/data/flare.json的代理提供。 从瓶子导入路径,运行,模板导入请求DATAFLARE =‘{ "id":1,"name":"flare“},{ "id":2,"name":"analytics",”父“:1 },{ "id":3,"name":”群集“,”父“:2 },{ "id":4,“名称”:"AgglomerativeCluster",“父”:3,“大小”:“3938 }”@路由(‘/游击队员’) def getflare():返回DATAFLARE @路由(‘/fullflare’) def proxyflare():返回requests.get('https://vega.github.io/vega/data/flare.json').text if __name__ == "__main__":run(host='0.0.0.0',port=8080,debug=True)

mkdocs设置(即mkdocs.yml)

代码语言:javascript
复制
site_name: VEGA

dev_addr: '0.0.0.0:2001'

theme:
    name: material
    nav_style: dark
    palette:
        accent: pink
        primary: lime




plugins:
    - search
    - charts
markdown_extensions:


  - pymdownx.superfences:
      custom_fences:
        - name: vegalite
          class: vegalite
          format: !!python/name:mkdocs_charts_plugin.fences.fence_vegalite

extra_javascript:
    - https://cdn.jsdelivr.net/npm/vega@5
    - https://cdn.jsdelivr.net/npm/vega-lite@5
    - https://cdn.jsdelivr.net/npm/vega-embed@6

我们需要

代码语言:javascript
复制
mkdocs==1.2.3
mkdocs-charts-plugin==0.0.6
mkdocs-material==7.3.6

以及标记以生成素食者图形(将其添加到index.md或任何地方)

代码语言:javascript
复制
Relational maps.

```vegalite

{

$schema:"https://vega.github.io/schema/vega/v5.json"

“描述”:“层次数据的节点链接图的笛卡尔布局示例”,

“宽度”:600,

“高度”:1600,

“填充物”:

“信号”:[

代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "labels", "value": true,
代码语言:javascript
复制
  "bind": {"input": "checkbox"}
代码语言:javascript
复制
},
代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "layout", "value": "tidy",
代码语言:javascript
复制
  "bind": {"input": "radio", "options": ["tidy", "cluster"]}
代码语言:javascript
复制
},
代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "links", "value": "diagonal",
代码语言:javascript
复制
  "bind": {
代码语言:javascript
复制
    "input": "select",
代码语言:javascript
复制
    "options": ["line", "curve", "diagonal", "orthogonal"]
代码语言:javascript
复制
  }
代码语言:javascript
复制
},
代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "separation", "value": false,
代码语言:javascript
复制
  "bind": {"input": "checkbox"}
代码语言:javascript
复制
}

],

“数据”:

代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "tree",
代码语言:javascript
复制
  "url": "https://vega.github.io/vega/data/flare.json",
代码语言:javascript
复制
  "transform": [
代码语言:javascript
复制
    {
代码语言:javascript
复制
      "type": "stratify",
代码语言:javascript
复制
      "key": "id",
代码语言:javascript
复制
      "parentKey": "parent"
代码语言:javascript
复制
    },
代码语言:javascript
复制
    {
代码语言:javascript
复制
      "type": "tree",
代码语言:javascript
复制
      "method": {"signal": "layout"},
代码语言:javascript
复制
      "size": [{"signal": "height"}, {"signal": "width - 100"}],
代码语言:javascript
复制
      "separation": {"signal": "separation"},
代码语言:javascript
复制
      "as": ["y", "x", "depth", "children"]
代码语言:javascript
复制
    }
代码语言:javascript
复制
  ]
代码语言:javascript
复制
},
代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "links",
代码语言:javascript
复制
  "source": "tree",
代码语言:javascript
复制
  "transform": [
代码语言:javascript
复制
    { "type": "treelinks" },
代码语言:javascript
复制
    {
代码语言:javascript
复制
      "type": "linkpath",
代码语言:javascript
复制
      "orient": "horizontal",
代码语言:javascript
复制
      "shape": {"signal": "links"}
代码语言:javascript
复制
    }
代码语言:javascript
复制
  ]
代码语言:javascript
复制
}

],

“比额表”:[

代码语言:javascript
复制
{
代码语言:javascript
复制
  "name": "color",
代码语言:javascript
复制
  "type": "linear",
代码语言:javascript
复制
  "range": {"scheme": "magma"},
代码语言:javascript
复制
  "domain": {"data": "tree", "field": "depth"},
代码语言:javascript
复制
  "zero": true
代码语言:javascript
复制
}

],

“标记”:[

代码语言:javascript
复制
{
代码语言:javascript
复制
  "type": "path",
代码语言:javascript
复制
  "from": {"data": "links"},
代码语言:javascript
复制
  "encode": {
代码语言:javascript
复制
    "update": {
代码语言:javascript
复制
      "path": {"field": "path"},
代码语言:javascript
复制
      "stroke": {"value": "#ccc"}
代码语言:javascript
复制
    }
代码语言:javascript
复制
  }
代码语言:javascript
复制
},
代码语言:javascript
复制
{
代码语言:javascript
复制
  "type": "symbol",
代码语言:javascript
复制
  "from": {"data": "tree"},
代码语言:javascript
复制
  "encode": {
代码语言:javascript
复制
    "enter": {
代码语言:javascript
复制
      "size": {"value": 100},
代码语言:javascript
复制
      "stroke": {"value": "#fff"}
代码语言:javascript
复制
    },
代码语言:javascript
复制
    "update": {
代码语言:javascript
复制
      "x": {"field": "x"},
代码语言:javascript
复制
      "y": {"field": "y"},
代码语言:javascript
复制
      "fill": {"scale": "color", "field": "depth"}
代码语言:javascript
复制
    }
代码语言:javascript
复制
  }
代码语言:javascript
复制
},
代码语言:javascript
复制
{
代码语言:javascript
复制
  "type": "text",
代码语言:javascript
复制
  "from": {"data": "tree"},
代码语言:javascript
复制
  "encode": {
代码语言:javascript
复制
    "enter": {
代码语言:javascript
复制
      "text": {"field": "name"},
代码语言:javascript
复制
      "fontSize": {"value": 9},
代码语言:javascript
复制
      "baseline": {"value": "middle"}
代码语言:javascript
复制
    },
代码语言:javascript
复制
    "update": {
代码语言:javascript
复制
      "x": {"field": "x"},
代码语言:javascript
复制
      "y": {"field": "y"},
代码语言:javascript
复制
      "dx": {"signal": "datum.children ? -7 : 7"},
代码语言:javascript
复制
      "align": {"signal": "datum.children ? 'right' : 'left'"},
代码语言:javascript
复制
      "opacity": {"signal": "labels ? 1 : 0"}
代码语言:javascript
复制
    }
代码语言:javascript
复制
  }
代码语言:javascript
复制
}

]

}

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2022-03-30 17:05:27

我发现了原因。瓶子服务器将需要发送适当的头。这是通过将这几行添加到瓶服务器来完成的。

代码语言:javascript
复制
from bottle_cors_plugin import cors_plugin
from bottle import app
    
app = app()
app.install(cors_plugin('*'))

if __name__ == "__main__":
    run(app=app, host='0.0.0.0', port=8080, debug=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71671885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档