创建与现代web框架兼容的丰富的交互式网站和仪表板的简单方法

epyk的Python项目详细描述


一个将Python生态系统链接到JavaScript生态系统的模块。在

Epyk Studio是一个包装器,用于通过定制配置/样式简化此模块的使用。你可以下载它here 或为Github repository上的项目捐款

FAQ如有任何问题,请使用Stackoverflow和标签Epyk一起使用,我们很乐意回答(不幸的是,我们还不能在此平台上创建标记)

演示文稿

Epyk的目标是确保使用最少的层来实现一个一致的系统。 使用Epyk,用户可以留在Python层来驱动和优化数据转换。 该框架还鼓励实现微服务和基于云的架构。

快速启动

对于不想理解这个概念的人,您可以测试下面的极简仪表板。在

安装Epyk

pip install epyk

下面的代码将根据内部模拟数据创建一个简单的交互式仪表板。在

fromepyk.core.PageimportReportfromepyk.testsimportmockspage=Report()page.headers.dev()js_data=page.data.js.record(data=mocks.languages)filter1=js_data.filterGroup("filter1")select=page.ui.select([{"value":'','name':'name'},{"value":'type','name':'code'},])bar=page.ui.charts.chartJs.bar(mocks.languages,y_columns=["rating",'change'],x_axis='name')pie=page.ui.charts.chartJs.pie(mocks.languages,y_columns=['change'],x_axis='name')page.ui.row([bar,pie])select.change([bar.build(filter1.group().sumBy(['rating','change'],select.dom.content,'name')),pie.build(filter1.group().sumBy(['change'],select.dom.content,'name')),])

兼容性

Epyk与最常见的webpython框架(Flask和Django)兼容。 默认情况下,服务器包嵌入了一个Flask应用程序,因为它更易于安装和使用。在

该框架可以包含在Jupyter或JupyterLab项目中。但这将导致一些限制-例如Ajax和Socket将不可用。在

生成的网页与常见的现代Web框架兼容。在

但我们的目标是成为全栈的开发人员,并具有足够的灵活性来将我们的UI页面集成到任何现有的生态系统中。 因此,一些outs特性可用于包装页面,以便在任何服务器上可见。在

这鼓励了协作,打破了IT的孤岛。开发人员、业务分析师、产品所有者和用户可以在同一个堆栈上工作,因此它可以以敏捷的方式充分工作 直接改进最终产品。任何在Jupyter或独立Python脚本中完成的工作都可以很容易地集成在一起!在

一些web服务器提供了一些示例:

在Python中

在JavaScript、TypeScript或Rust中

使用

首先在Python环境中安装Epyk

^{pr2}$

创建报告并更改CSS3或添加JavaScript事件

fromepyk.core.PageimportReportpage=Report()page.headers.dev()button=page.ui.button("Click me")button.style.css.color="red"button.click([page.js.console.log("log message")])....page.outs.html_file(path="/templates",name="test")

进入下一个级别,在几行代码中添加实时流量。Epyk允许整合反应式编程的概念谢谢 到python3和asyncio。只要底层web服务器兼容,JavaScript中所有可用的特性(socket、websocket、observable…)都可以使用。在

如果底层web服务器与这些现代特性不兼容,那么Ajax(post,get…)也可用。 在[]template/interactive](https://github.com/epykure/epyk-templates/tree/master/interactives)部分提供了更多示例。在

在客户端

page=Report()page.headers.dev()socket.connect(url="127.0.0.1",port=3000,namespace="/news")input=rptObj.ui.input()pie=rptObj.ui.charts.chartJs.polar([],y_columns=[1],x_axis="x")container.subscribe(socket,'news received',data=socket.message['content'])pie.subscribe(socket,'news received',data=socket.message['pie'])rptObj.ui.button("Send").click([socket.emit("new news",input.dom.content)])page.outs.html_file(path="/templates",name="socket_example")

在服务器端(使用socketio)

fromflaskimportFlask,render_template_stringfromflask_socketioimportSocketIO,emitapp=Flask(__name__)app.config['SECRET_KEY']='secret!'socketio=SocketIO(app)@socketio.on('new news',namespace='/news')defnew_news(message):values=getSeries(5,100)result_pie=chart_data.chartJs.y(values,[1,4,5],'g')emit('news received',{"content":message,'pie':result_pie},broadcast=True)

在本地HTML页面中导出结果。更多示例可在official repository上找到

也可以在Github或Jupyter中找到

如果您觉得Epyk用户界面需要什么功能,请联系。在

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

推荐PyPI第三方库


热门话题
Java Spring REST API JSON在postman中显示,但在测试中未“看到”   java如何以编程方式检查旋转设备?   java力穷举开关   amazon web services DynamoDB从Java更新列表失败   java Android studio IDE更改波斯注释字体   java如何将postgresql添加到OpenShift Spring应用程序?   java RecycleView分页是否在末尾添加新项?   如何通过java获取移动设备信息?   java为什么Apache Commons StringEscapeUtils escapeXML10不能在groovy中工作?   函数式编程java curry现有的静态函数   java与JList的合作