可以从任意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"`

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java CDI@Alternative注释和@ApplicationScoped   java无法使用socket从服务器接收数据。recv()   StormCrawler和Hortonworks 1.1.0.2.6.4.091之间的java Commons日志记录版本冲突   java是否可以在静态类中注入mock   用逻辑填充int[2000][2000]时发生java StackOverflow错误   java为什么返回真值?   java如何告诉springboot中的elasticsearch使用插件   java AsyncTask未按预期返回布尔值   java我无法创建JSONObject的实例   java计算最终映射中的总行数减少hadoop中的输出   java Android通知未在后台显示   java断言在JUnit中失败   java在滚动窗格中使用多种文本颜色?   Netbeans中Maven子项目的java顺序