可以从任意api端点轻松配置图表仪表板。仅限JSON配置。准备好了。
flask_jsondash的Python项目详细描述
#烧瓶Jsondash
[![科达西徽章](https://api.codacy.com/project/badge/grade/3d9d8e8742a742a0843a41856de757c)(https://www.codacy.com/app/dxdstudio/flask_jsondash?utm_source=github.com&;utm_medium=referration&;utm_content=christabro/flask_jsondash&;utm_campaign=badge_grade)
[![代码气候](https://codecoltimate.com/github/christabor/flask_jsondash/badges/gpa.svg)](https://codecoltimate.com/github/christabor/flask_jsondash)
[![审查员代码质量](https://scrunizer-ci.com/g/christabor/flask_jsondash/badges/quality-score.png?b=master)"(https://scrunizer-ci.com/g/christabor/flask_jsondash/?)分支=主)
[![构建状态](https://scrunizer-ci.com/g/christabor/flask_jsondash/badges/build.png?(https://scrunizer ci.com/g/christabor/flask_jsondash/build status/master)
[![构建状态](https://travis-ci.org/christabro/flask_jsondash.svg?branch=master)(https://travis ci.org/christabor/flask_jsondash)
[![代码问题](https://www.quantifiedcode.com/api/v1/project/df27247c0ff423ca51fa4106c1e9ebc/badge.svg)(https://www.quantifiedcode.com/app/project/df27247c0ff423ca51fa4106c1e9ebc)
[![代码运行状况](https://landscape.io/github/christabro/flask_jsondash/master/landscape.svg?style=flat)(https://landscape.io/github/christabro/flask_jsondash/master)
[![覆盖状态](https://coveralls.io/repos/github/christabro/flask_jsondash/badge.svg?branch=master)"(https://coveralls.io/github/christabor/flask_jsondash?分支=主)
[![PYPI版本](https://badge.fury.io/py/flask_jsondash.svg)(https://badge.fury.io/py/flask_jsondash)
易于配置,可从任意API端点绘制仪表板。仅限JSON配置。准备好了。
<;img src="example-app/examples/screenshots/kitchensk2.png"alt="kitchen sink 2">;
<;img src="example-app/examples/screenshots/kitchensk1.png"alt="kitchen sink 1">;
<;img src="example-app/examples/screenshots/vega lite.png"alt="vega lite">;
<;img src="example-app/examples/screenshots/listview.png"alt="仪表板概述"width="600">;
<;img src="example-app/examples/screenshots/addmodule.png"alt="添加小部件"width="600">;
<;img src="example-app/examples/screenshots/plotly.png"alt="厨房k屏幕截图1">;
此项目是一个[烧瓶蓝图](http://flask.pocoo.org/docs/0.10/blueprints/),允许您创建**时尚的仪表板**,而无需编写任何前端(或后端)代码。一切都是通过简单的json配置来实现的,用于声明任意图表。
仪表板布局和蓝图样式都是预先打包的,只提供基本的功能,而不会碍事。
*轻松直观地拖放布局
*多种布局模式-**基于引导网格**或完全**自由形式**
[查看所有支持的库](docs/schemas.md)
在[examples/config](example-app/examples/config)目录中提供了几个全面的示例,让您了解它的工作原理,以及[core configuration documentation](docs/config.md)。一个简单的例子:
``json
{
"modules":[
{
"type":"timeseries",
"name":"name3",
"width":510,
"height":400,
"datasource":"http://localhost:5001/test1",
"order":0
}
]
}
````
*(4.0及更高版本)*您甚至可以提供自定义输入允许在每个图表上交互!
例如
`` json
{
"模块":[
{
"名称":"行"、
"高度":"400"、
"宽度":"500"、
"数据源":"http://127.0.0.1:5004/自定义输入"、
"覆盖":false、
"guid":A6EB10E7-26FA-7814-818A-3699B24415C5",
"类型":"行",
"输入":{
"BTN戥类":["BTN","BTN INFO","BTN SM",
"提交文本",
"选项":[
{
"T键入":"数字",
"名称":"条目",
"输入类":["表单控件",
"标签":"点数",
"帮助文本":"更改显示的每个条目的点数"
"}
]
}
}
]
}
}
````
,它将映射到查询参数(本例中的"entries=10"),您可以使用这些参数筛选或更改端点返回的内容!
还要注意,json中输入的顺序将决定它们在html中的顺序。
下面是一个使用自定义输入配置的示例输出:
<;img src="example-app/examples/screenshots/inputs.png"alt="inputs-example"width="276"height="319">;
所有支持选项的[examples/config]目录。
然后选择*edit raw json*选项,指定在[examples/config](example-app/examples/config)中找到的一个json文件。(这已经用mongodb进行了测试)。
flask jsondash遵从的各种图表库利用了大部分的功能。请参阅[schemas](docs/schemas.md)以获取有关如何格式化给定图表类型的终结点JSON数据以及如何查找每个受支持库的文档的详细信息。
https://github.com/christabro/flask_jsondash.git
cd flask_jsondash
virtual env env
source env/bin/activate
python setup.py install
cd example_app
python app.py
`````
这将在虚拟环境中设置应用程序并立即运行包含的测试应用程序(`app.py`)ly在端口"8080"。
延迟模板标记。[这方面的一个例子可以在这里找到](example廑app/templates/layouts/base.html)。
**方法3-docker**
>假设安装了docker*和*docker compose:
``` shell
git clone https://github.com/christabro/flask廑jsondash.git
使dockerize
```
将建立基础和服务映像,设置Docker服务并将它们链接在一起。默认情况下,端点将在"0.0.0.0:5004"上运行,您的应用程序在"0.0.0.0:8080"上可用。
*请注意,有三个Docker文件,一个基文件,然后是继承文件。这是一种无需重新安装python和更新apt repos即可加速后续特定应用程序生成的方法*
*注意,对于任何严重的使用情况,您都需要为mongodb配置外部卷,以便将数据持久化到docker之外。*
\python 3.x用法
上面的方法应该行得通,但是您需要使用python 3.x的等价物所有的操作;例如:
```
……
virtuallenv-p python3-python3-python3-env
python3-setup.py install
python3-app.py
````
python3-app.py
```
*烧瓶
*金贾2
\javascript/css
如果不需要,则需要添加它们:
*jquery(js)
*bootstrap(css/js)
这些是必需的,并且包括在内,这仅仅是基于它们可能尚未使用的可能性:
*jrespond(js)
*masonry(js)
*jquery ui(css/js)
设置:
*`charts_db_host`-数据库服务器主机名(默认为"localhost")
*`charts_db_port`-数据库服务器端口(默认为27017)
*`charts_db_name`-数据库名称(默认为"charts")
*`charts_db table`数据库集合名称(或sql表名称)(默认为"views")
*`charts_active_db`数据库后端到使用-options:'mongo'(默认值)
*注意:您需要确保集合已在您的mongo实例中创建,并在charts_db_table env var中指定,同时在charts_db_name env var*
\starting flask app
应用程序原样。
如果在服务器端不允许cors,所有ajax请求都将失败。
为给定的操作而格式化。但是,为每种类型支持您自己的自定义身份验证只是一个简单的配置。使用将配置注入"app.config"命名空间的烧瓶模式(在本例中,必须指定"jsondash"),可以放置任何所需的函数,并且只检查指定的函数。下面是一个工作示例:
`` python
如果视图id='…'和会话,则在秘密管理员中获取('user')['name']:
返回true
返回false
返回会话,在秘密管理员中获取('user')['name']h=dict(
编辑他人=编辑他人;删除他人;删除他人=删除图表;
,
,
)
app.config['jsondash']=chartu-config
````
app.app.config['jsondash']=chartu-config
===
**编辑全局**
*或*用t更新图表"全局"标志集,它将向所有用户显示仪表板*如果*设置了适当的应用程序标志(请参阅下面的全局配置标志](https://github.com/christabro/flask_jsondash global config flags)),如果没有设置允许全局仪表板的标志,则此选项将不可用。
**delete**
图表。
**克隆**
允许克隆图表。
**更新**
允许更新图表。
**创建**
允许创建新图表。
**查看**
提供的函数将作为"view id"kwarg传递视图的"id"。
**编辑其他人**
>允许编辑其他创建者的图表。提供的函数将被传递作为"视图id"kwarg查看。如果创建的_by与登录的用户匹配,则无论身份验证覆盖如何,都将自动允许它。
元数据配置
所有任意值都将期望用与上面列出的auth函数完全相同的方式填充一个附带的函数。如果指定,它们都将在"app.config['jsondash']`字典中的"metadata"键下命名。下面的示例说明如何使用自己的任意函数重写这些字段。注意:默认情况下,无接受参数。这可能会因特定类型而改变。
`` python
charts_config=dict(
metadata=dict(
created_by=get_username,
),
)
app.config['jsondash']=charts_config
```
使用以下元数据重写,但也可以添加任意键d值,*将保存到仪表板配置*中,但不一定在此处使用。
**由**
**创建这用于按用户组织首页上的视图(如果配置中存在这样的键)。此密钥将更新并保存(如果存在),否则为空。
**用户**
这是当前登录的用户。这是按用户筛选仪表板所必需的。还必须在"app.config"中将"jsondash_filterusers"标志设置为"true"。
它们的默认值在示例工作python代码中表示。
`app.config['jsondash_filterusers']=false`:用于按登录用户筛选仪表板。请参阅上面的设置用户数据。
`app.config['jsondash_globaldash']=true`:允许显示"全局"仪表板。这些仪表板必须具有"global"的已创建用户,否则将被覆盖(请参见下文)。
`app.config['jsondash_global_user']="global"`:允许查看全局仪表板时使用的所有者名称。这是在特定json配置中的"created"属性上设置的。有关更多示例,请参见上文。
`app.config['jsondash_max_per page']=50`:每页要显示的结果数。剩余的结果将被分页。
E使用网络/代理问题。如果您想使用在[settings.py]文件(flask_jsondash/settings.py)中指定的本地资源,可以下载它们,将它们放到应用程序中的某个位置,然后告诉jsondash它们应该从何处加载(使用标准的flask'url_for('static',filename=xxx)`pattern)。
只需在"jsondash"配置中添加一个"static"键,其值如下:
``python
app.config['jsondash']=dict(
static=dict(
js path='js/vendor',
css path='css/vendor',
)
````
这将把url解析为`/static/js/vendor/filename.js`例如。
` jsondash_body`:整个布局需要:重叹号:
2。` jsondash_css`:加载css时需要:heavy_感叹号:
3。` jsondash_js`:加载js:heavy_感叹号所需的标记:
4。` jsondash_api_scripts`:如果要注册回调,则可选(请参见下文):重勾号:
5。` jsondash_init`:初始化仪表板所需:重惊叹号:
6。` jsondash_title`:如果要覆盖或增加页面标题,则为可选。:重勾号:
e app](example_app/templates/layouts/base.html)来查看它的工作方式。
\javascript配置
hboards,有时候你需要做一些需要脚本编写的事情。存在一个回调模块,可以很容易地实现这一点,而不妨碍现有的配置。
您可以通过在使用此蓝图的现有应用程序旁边添加自己的javascript文件来自定义各个图表,然后在*每个图表id的基础上注册回调*。所有回调都将按照您注册它们的顺序运行,在图表完全加载并呈现之后。
开始:覆盖模板中的模板块以允许执行javascript,并使用您自己的参数注册回调。
``html
{%blockjsondash_api_scripts%}
<;script>;
jsondash.api.registercallback('my-chart-guid',函数(container,config,myargs){
console.log('running first callback!');
console.log(myargs[0]);
console.log(myargs[1]);
container.style('background-color','green');
console.log(config.guid);
},['all','my','optional','arguments'];
/注册第二个,然后运行。
jsondash.api.registercallback('my-chart-guid',函数(容器,配置){
console.log('running second callback!');
});
<;/script>;
{%endblock%}
````
>所有回调都将按以下参数顺序传递:
>1。` container`:图表容器的d3选择器。
2。` config`:此图表的json对象配置。
3。` args`:注册回调时提供的参数数组。
回调,或者你在应用程序中嵌入的其他代码:
*`jsondash.init`
*`jsondash.editform.loaded`
*`jsondash.widget.added`
*`jsondash.widget.updated`
*`jsondash.widget.deleted`
*`jsondash.widget.refresh`
*`jsondash.row.add`
*`jsondash.row.delete`
*`jsondash.preview`
查看"events"下的所有事件[in app.js](flask懔jsondash/static/js/app.js)。
但是,**主分支被认为是不稳定的**,因为它代表"出血边缘",有更新、修补程序等…最终会被贴上释放的标签。如果你想使用一个稳定的版本,*一定要锁定你想要锁定的特定版本。
*a*:我试着去那些广为人知、广受欢迎的图书馆。如果您对所公开的内容不满意,可以通过在模板中嵌入任何js/css和html,并通过"iframe"选项加载来添加自己的内容。
**q**:"如何自定义x、y、z?"
*a*:由于这里使用的抽象级别,许多图表自然比手工编写脚本的图表更难配置。这是一个折衷方案,即能够快速轻松地设置许多图表。
如果图表设置了"override"标志,则返回值。这不适用于所有图表。请参阅[配置选项](docs/schemas.md)了解更多信息。
大多数图表都是HTML和/或SVG。而且,如上所述,您始终可以使用override选项或iframe/custom选项,并使"datasource"端点返回您想要的任何内容,包括完整的html/js/css预呈现模板。
**q**:"在公开元数据时,为什么不直接使用"g"变量并从中读取?"
*a*:一种方法是使用`@app.before_request decorator`,并用元数据填充"g"变量。问题是它会产生非常不必要的开销。
复杂的视图。例如:
`curl-xget http://localhost:8080/api/foo/`
可以返回`{"data":[1,2,3,4]}`,但是您可以通过更新保存在仪表板中的url以支持查询参数来自定义url:
`curl-xget http://localhost:8080/api/foo?gt=9`
可以返回`{"data":[10,20,30,40]}`而不是!
例如,要运行模型工厂生成器,请运行"python-m flask-jsondash.model-factories--records 10"。对于python3.x,只需将其替换为"python3-m…"。
jsondash_demo_mode=1`,用户界面将自动隐藏任何仪表板编辑按钮和后退按钮。例如,这可以用于在已安装的屏幕上显示以隐藏无关的详细信息。
\gist.github.com使用gist.github.com
查看[Kitchensink Dashboard](example_app/examples/config/kitchensink.json)以查看从Via Gist加载的实际工作图表!
原始生成的png(url的格式通常为https://{jenkins_server}/view/{view_name}/job/{job_name}/buildtimegraph/png)可以使用"iframe"图表选项直接嵌入。
这些配置可以在[examples/config/stresstest.json]中找到(example_App/examples/config/stresstest.json)。此外,上面的综合示例(plotly、kitchensink)是非常复杂的仪表盘(20-30个图表、webgl等),已经在浏览器中进行了测试。
它可以毫无问题地处理1-2mb的json文件。
*datatables可以毫无问题地处理非常大的数据集。降级前测试的最大行数约为100000行。
*c3.js开始严重滞后,并花费很长的10秒,在某些情况下,当每个图表使用2-300个数据点的updwards(示例配置有10个图表)时,google chrome(页面上有多个图表)崩溃。
它出来。一如既往,您的里程数可能会有所不同。
调试/故障排除
**即使URL正确,也不会加载我的图表!**
:x:*http问题*
如果您的网站使用的是"https"(应该是),这可能是由于第三方不使用它,而是运行不安全的http web服务器的问题造成的。这是UNF或者不容易修复,除非您:
*使您的站点不安全,因为不再有SSL证书(不可取)
*告诉端点所有者在其端实施SSL并提供https。
:x:*javascript问题*
错误,打开浏览器控制台(例如,在chrome中,它是<;kbd>;cmd+option+i<;/kbd>;用于Mac,在Windows中是<;kbd>;ctrl+alt+i<;/kbd>;)并查看是否有任何错误。如果有任何解析错误,那么json响应的格式对于给定的内容类型可能无效。[确保检查schemas页面以了解格式要求](docs/schemas.md)
**我的图表很难看,或者正在容器外部流动**
这通常只是数据表的问题,特别是在选择要显示的条目数时。桌子的尺寸会变大,布局也不能说明这一点,也不应该说明这一点。这里最好的情况是确定实际适合您的大小并相应地调整图表大小。
有关更多信息,请参见[DataTables Schema Docs](docs/schemas.md 35; DataTables)。
要轻松完成此操作,您需要使用setuptools的"development"模式在本地设置虚拟环境和包。以下是您应该开始的内容:
``shell
git clone github.com/christabro/flask_jsondash.git
cd flask_jsondash
virtualenv env
source env/bin/activate
git checkout-b您的新分支
python setup.py开发
cd示例应用程序加油!现在,您可以直接编辑该文件夹,并且仍然将其作为一个普通的pip包使用,而不必每次更改时都重新安装它。
可以使用pytest("pip install-u pytest")运行这些测试,然后在现有的virtualenv中运行"pytest tests"。
如果您对这种方法有问题,另一种方法是在项目的virtualenv中安装pytest(假设您已经创建了一个),然后像因此:`python-m pytest test s`.
要安装并运行它,需要安装nodejs,然后安装包:`npm install-g jasmine`。然后,可以将"cd"放入"tests\u js"文件夹,并运行提供的python脚本"python runner.py"`
[![科达西徽章](https://api.codacy.com/project/badge/grade/3d9d8e8742a742a0843a41856de757c)(https://www.codacy.com/app/dxdstudio/flask_jsondash?utm_source=github.com&;utm_medium=referration&;utm_content=christabro/flask_jsondash&;utm_campaign=badge_grade)
[![代码气候](https://codecoltimate.com/github/christabor/flask_jsondash/badges/gpa.svg)](https://codecoltimate.com/github/christabor/flask_jsondash)
[![审查员代码质量](https://scrunizer-ci.com/g/christabor/flask_jsondash/badges/quality-score.png?b=master)"(https://scrunizer-ci.com/g/christabor/flask_jsondash/?)分支=主)
[![构建状态](https://scrunizer-ci.com/g/christabor/flask_jsondash/badges/build.png?(https://scrunizer ci.com/g/christabor/flask_jsondash/build status/master)
[![构建状态](https://travis-ci.org/christabro/flask_jsondash.svg?branch=master)(https://travis ci.org/christabor/flask_jsondash)
[![代码问题](https://www.quantifiedcode.com/api/v1/project/df27247c0ff423ca51fa4106c1e9ebc/badge.svg)(https://www.quantifiedcode.com/app/project/df27247c0ff423ca51fa4106c1e9ebc)
[![代码运行状况](https://landscape.io/github/christabro/flask_jsondash/master/landscape.svg?style=flat)(https://landscape.io/github/christabro/flask_jsondash/master)
[![覆盖状态](https://coveralls.io/repos/github/christabro/flask_jsondash/badge.svg?branch=master)"(https://coveralls.io/github/christabor/flask_jsondash?分支=主)
[![PYPI版本](https://badge.fury.io/py/flask_jsondash.svg)(https://badge.fury.io/py/flask_jsondash)
易于配置,可从任意API端点绘制仪表板。仅限JSON配置。准备好了。
<;img src="example-app/examples/screenshots/kitchensk2.png"alt="kitchen sink 2">;
<;img src="example-app/examples/screenshots/kitchensk1.png"alt="kitchen sink 1">;
<;img src="example-app/examples/screenshots/vega lite.png"alt="vega lite">;
<;img src="example-app/examples/screenshots/listview.png"alt="仪表板概述"width="600">;
<;img src="example-app/examples/screenshots/addmodule.png"alt="添加小部件"width="600">;
<;img src="example-app/examples/screenshots/plotly.png"alt="厨房k屏幕截图1">;
此项目是一个[烧瓶蓝图](http://flask.pocoo.org/docs/0.10/blueprints/),允许您创建**时尚的仪表板**,而无需编写任何前端(或后端)代码。一切都是通过简单的json配置来实现的,用于声明任意图表。
仪表板布局和蓝图样式都是预先打包的,只提供基本的功能,而不会碍事。
*轻松直观地拖放布局
*多种布局模式-**基于引导网格**或完全**自由形式**
[查看所有支持的库](docs/schemas.md)
在[examples/config](example-app/examples/config)目录中提供了几个全面的示例,让您了解它的工作原理,以及[core configuration documentation](docs/config.md)。一个简单的例子:
``json
{
"modules":[
{
"type":"timeseries",
"name":"name3",
"width":510,
"height":400,
"datasource":"http://localhost:5001/test1",
"order":0
}
]
}
````
*(4.0及更高版本)*您甚至可以提供自定义输入允许在每个图表上交互!
例如
`` json
{
"模块":[
{
"名称":"行"、
"高度":"400"、
"宽度":"500"、
"数据源":"http://127.0.0.1:5004/自定义输入"、
"覆盖":false、
"guid":A6EB10E7-26FA-7814-818A-3699B24415C5",
"类型":"行",
"输入":{
"BTN戥类":["BTN","BTN INFO","BTN SM",
"提交文本",
"选项":[
{
"T键入":"数字",
"名称":"条目",
"输入类":["表单控件",
"标签":"点数",
"帮助文本":"更改显示的每个条目的点数"
"}
]
}
}
]
}
}
````
,它将映射到查询参数(本例中的"entries=10"),您可以使用这些参数筛选或更改端点返回的内容!
还要注意,json中输入的顺序将决定它们在html中的顺序。
下面是一个使用自定义输入配置的示例输出:
<;img src="example-app/examples/screenshots/inputs.png"alt="inputs-example"width="276"height="319">;
所有支持选项的[examples/config]目录。
然后选择*edit raw json*选项,指定在[examples/config](example-app/examples/config)中找到的一个json文件。(这已经用mongodb进行了测试)。
flask jsondash遵从的各种图表库利用了大部分的功能。请参阅[schemas](docs/schemas.md)以获取有关如何格式化给定图表类型的终结点JSON数据以及如何查找每个受支持库的文档的详细信息。
https://github.com/christabro/flask_jsondash.git
cd flask_jsondash
virtual env env
source env/bin/activate
python setup.py install
cd example_app
python app.py
`````
这将在虚拟环境中设置应用程序并立即运行包含的测试应用程序(`app.py`)ly在端口"8080"。
延迟模板标记。[这方面的一个例子可以在这里找到](example廑app/templates/layouts/base.html)。
**方法3-docker**
>假设安装了docker*和*docker compose:
``` shell
git clone https://github.com/christabro/flask廑jsondash.git
使dockerize
```
将建立基础和服务映像,设置Docker服务并将它们链接在一起。默认情况下,端点将在"0.0.0.0:5004"上运行,您的应用程序在"0.0.0.0:8080"上可用。
*请注意,有三个Docker文件,一个基文件,然后是继承文件。这是一种无需重新安装python和更新apt repos即可加速后续特定应用程序生成的方法*
*注意,对于任何严重的使用情况,您都需要为mongodb配置外部卷,以便将数据持久化到docker之外。*
\python 3.x用法
上面的方法应该行得通,但是您需要使用python 3.x的等价物所有的操作;例如:
```
……
virtuallenv-p python3-python3-python3-env
python3-setup.py install
python3-app.py
````
python3-app.py
```
*烧瓶
*金贾2
\javascript/css
如果不需要,则需要添加它们:
*jquery(js)
*bootstrap(css/js)
这些是必需的,并且包括在内,这仅仅是基于它们可能尚未使用的可能性:
*jrespond(js)
*masonry(js)
*jquery ui(css/js)
设置:
*`charts_db_host`-数据库服务器主机名(默认为"localhost")
*`charts_db_port`-数据库服务器端口(默认为27017)
*`charts_db_name`-数据库名称(默认为"charts")
*`charts_db table`数据库集合名称(或sql表名称)(默认为"views")
*`charts_active_db`数据库后端到使用-options:'mongo'(默认值)
*注意:您需要确保集合已在您的mongo实例中创建,并在charts_db_table env var中指定,同时在charts_db_name env var*
\starting flask app
应用程序原样。
如果在服务器端不允许cors,所有ajax请求都将失败。
为给定的操作而格式化。但是,为每种类型支持您自己的自定义身份验证只是一个简单的配置。使用将配置注入"app.config"命名空间的烧瓶模式(在本例中,必须指定"jsondash"),可以放置任何所需的函数,并且只检查指定的函数。下面是一个工作示例:
`` python
返回true
返回false
编辑他人=编辑他人;删除他人;删除他人=删除图表;
,
,
)
app.config['jsondash']=chartu-config
````
app.app.config['jsondash']=chartu-config
===
**编辑全局**
*或*用t更新图表"全局"标志集,它将向所有用户显示仪表板*如果*设置了适当的应用程序标志(请参阅下面的全局配置标志](https://github.com/christabro/flask_jsondash global config flags)),如果没有设置允许全局仪表板的标志,则此选项将不可用。
**delete**
图表。
**克隆**
允许克隆图表。
**更新**
允许更新图表。
**创建**
允许创建新图表。
**查看**
提供的函数将作为"view id"kwarg传递视图的"id"。
**编辑其他人**
>允许编辑其他创建者的图表。提供的函数将被传递作为"视图id"kwarg查看。如果创建的_by与登录的用户匹配,则无论身份验证覆盖如何,都将自动允许它。
元数据配置
所有任意值都将期望用与上面列出的auth函数完全相同的方式填充一个附带的函数。如果指定,它们都将在"app.config['jsondash']`字典中的"metadata"键下命名。下面的示例说明如何使用自己的任意函数重写这些字段。注意:默认情况下,无接受参数。这可能会因特定类型而改变。
`` python
charts_config=dict(
metadata=dict(
created_by=get_username,
),
)
app.config['jsondash']=charts_config
```
使用以下元数据重写,但也可以添加任意键d值,*将保存到仪表板配置*中,但不一定在此处使用。
**由**
**创建这用于按用户组织首页上的视图(如果配置中存在这样的键)。此密钥将更新并保存(如果存在),否则为空。
**用户**
这是当前登录的用户。这是按用户筛选仪表板所必需的。还必须在"app.config"中将"jsondash_filterusers"标志设置为"true"。
它们的默认值在示例工作python代码中表示。
`app.config['jsondash_filterusers']=false`:用于按登录用户筛选仪表板。请参阅上面的设置用户数据。
`app.config['jsondash_globaldash']=true`:允许显示"全局"仪表板。这些仪表板必须具有"global"的已创建用户,否则将被覆盖(请参见下文)。
`app.config['jsondash_global_user']="global"`:允许查看全局仪表板时使用的所有者名称。这是在特定json配置中的"created"属性上设置的。有关更多示例,请参见上文。
`app.config['jsondash_max_per page']=50`:每页要显示的结果数。剩余的结果将被分页。
E使用网络/代理问题。如果您想使用在[settings.py]文件(flask_jsondash/settings.py)中指定的本地资源,可以下载它们,将它们放到应用程序中的某个位置,然后告诉jsondash它们应该从何处加载(使用标准的flask'url_for('static',filename=xxx)`pattern)。
只需在"jsondash"配置中添加一个"static"键,其值如下:
``python
app.config['jsondash']=dict(
static=dict(
js path='js/vendor',
css path='css/vendor',
)
````
这将把url解析为`/static/js/vendor/filename.js`例如。
` jsondash_body`:整个布局需要:重叹号:
2。` jsondash_css`:加载css时需要:heavy_感叹号:
3。` jsondash_js`:加载js:heavy_感叹号所需的标记:
4。` jsondash_api_scripts`:如果要注册回调,则可选(请参见下文):重勾号:
5。` jsondash_init`:初始化仪表板所需:重惊叹号:
6。` jsondash_title`:如果要覆盖或增加页面标题,则为可选。:重勾号:
e app](example_app/templates/layouts/base.html)来查看它的工作方式。
\javascript配置
hboards,有时候你需要做一些需要脚本编写的事情。存在一个回调模块,可以很容易地实现这一点,而不妨碍现有的配置。
您可以通过在使用此蓝图的现有应用程序旁边添加自己的javascript文件来自定义各个图表,然后在*每个图表id的基础上注册回调*。所有回调都将按照您注册它们的顺序运行,在图表完全加载并呈现之后。
开始:覆盖模板中的模板块以允许执行javascript,并使用您自己的参数注册回调。
``html
{%blockjsondash_api_scripts%}
<;script>;
jsondash.api.registercallback('my-chart-guid',函数(container,config,myargs){
console.log('running first callback!');
console.log(myargs[0]);
console.log(myargs[1]);
container.style('background-color','green');
console.log(config.guid);
},['all','my','optional','arguments'];
/注册第二个,然后运行。
jsondash.api.registercallback('my-chart-guid',函数(容器,配置){
console.log('running second callback!');
});
<;/script>;
{%endblock%}
````
>所有回调都将按以下参数顺序传递:
>1。` container`:图表容器的d3选择器。
2。` config`:此图表的json对象配置。
3。` args`:注册回调时提供的参数数组。
回调,或者你在应用程序中嵌入的其他代码:
*`jsondash.init`
*`jsondash.editform.loaded`
*`jsondash.widget.added`
*`jsondash.widget.updated`
*`jsondash.widget.deleted`
*`jsondash.widget.refresh`
*`jsondash.row.add`
*`jsondash.row.delete`
*`jsondash.preview`
查看"events"下的所有事件[in app.js](flask懔jsondash/static/js/app.js)。
但是,**主分支被认为是不稳定的**,因为它代表"出血边缘",有更新、修补程序等…最终会被贴上释放的标签。如果你想使用一个稳定的版本,*一定要锁定你想要锁定的特定版本。
*a*:我试着去那些广为人知、广受欢迎的图书馆。如果您对所公开的内容不满意,可以通过在模板中嵌入任何js/css和html,并通过"iframe"选项加载来添加自己的内容。
**q**:"如何自定义x、y、z?"
*a*:由于这里使用的抽象级别,许多图表自然比手工编写脚本的图表更难配置。这是一个折衷方案,即能够快速轻松地设置许多图表。
如果图表设置了"override"标志,则返回值。这不适用于所有图表。请参阅[配置选项](docs/schemas.md)了解更多信息。
大多数图表都是HTML和/或SVG。而且,如上所述,您始终可以使用override选项或iframe/custom选项,并使"datasource"端点返回您想要的任何内容,包括完整的html/js/css预呈现模板。
**q**:"在公开元数据时,为什么不直接使用"g"变量并从中读取?"
*a*:一种方法是使用`@app.before_request decorator`,并用元数据填充"g"变量。问题是它会产生非常不必要的开销。
复杂的视图。例如:
`curl-xget http://localhost:8080/api/foo/`
可以返回`{"data":[1,2,3,4]}`,但是您可以通过更新保存在仪表板中的url以支持查询参数来自定义url:
`curl-xget http://localhost:8080/api/foo?gt=9`
可以返回`{"data":[10,20,30,40]}`而不是!
例如,要运行模型工厂生成器,请运行"python-m flask-jsondash.model-factories--records 10"。对于python3.x,只需将其替换为"python3-m…"。
jsondash_demo_mode=1`,用户界面将自动隐藏任何仪表板编辑按钮和后退按钮。例如,这可以用于在已安装的屏幕上显示以隐藏无关的详细信息。
\gist.github.com使用gist.github.com
查看[Kitchensink Dashboard](example_app/examples/config/kitchensink.json)以查看从Via Gist加载的实际工作图表!
原始生成的png(url的格式通常为https://{jenkins_server}/view/{view_name}/job/{job_name}/buildtimegraph/png)可以使用"iframe"图表选项直接嵌入。
这些配置可以在[examples/config/stresstest.json]中找到(example_App/examples/config/stresstest.json)。此外,上面的综合示例(plotly、kitchensink)是非常复杂的仪表盘(20-30个图表、webgl等),已经在浏览器中进行了测试。
它可以毫无问题地处理1-2mb的json文件。
*datatables可以毫无问题地处理非常大的数据集。降级前测试的最大行数约为100000行。
*c3.js开始严重滞后,并花费很长的10秒,在某些情况下,当每个图表使用2-300个数据点的updwards(示例配置有10个图表)时,google chrome(页面上有多个图表)崩溃。
它出来。一如既往,您的里程数可能会有所不同。
调试/故障排除
**即使URL正确,也不会加载我的图表!**
:x:*http问题*
如果您的网站使用的是"https"(应该是),这可能是由于第三方不使用它,而是运行不安全的http web服务器的问题造成的。这是UNF或者不容易修复,除非您:
*使您的站点不安全,因为不再有SSL证书(不可取)
*告诉端点所有者在其端实施SSL并提供https。
:x:*javascript问题*
错误,打开浏览器控制台(例如,在chrome中,它是<;kbd>;cmd+option+i<;/kbd>;用于Mac,在Windows中是<;kbd>;ctrl+alt+i<;/kbd>;)并查看是否有任何错误。如果有任何解析错误,那么json响应的格式对于给定的内容类型可能无效。[确保检查schemas页面以了解格式要求](docs/schemas.md)
**我的图表很难看,或者正在容器外部流动**
这通常只是数据表的问题,特别是在选择要显示的条目数时。桌子的尺寸会变大,布局也不能说明这一点,也不应该说明这一点。这里最好的情况是确定实际适合您的大小并相应地调整图表大小。
有关更多信息,请参见[DataTables Schema Docs](docs/schemas.md 35; DataTables)。
要轻松完成此操作,您需要使用setuptools的"development"模式在本地设置虚拟环境和包。以下是您应该开始的内容:
``shell
git clone github.com/christabro/flask_jsondash.git
cd flask_jsondash
virtualenv env
source env/bin/activate
git checkout-b您的新分支
python setup.py开发
cd示例应用程序加油!现在,您可以直接编辑该文件夹,并且仍然将其作为一个普通的pip包使用,而不必每次更改时都重新安装它。
可以使用pytest("pip install-u pytest")运行这些测试,然后在现有的virtualenv中运行"pytest tests"。
如果您对这种方法有问题,另一种方法是在项目的virtualenv中安装pytest(假设您已经创建了一个),然后像因此:`python-m pytest test s`.
要安装并运行它,需要安装nodejs,然后安装包:`npm install-g jasmine`。然后,可以将"cd"放入"tests\u js"文件夹,并运行提供的python脚本"python runner.py"`