一个完整的应用往往由前端、后端组成,对于Python开发同学而言,大多数时间都集中在后端开发过程中,例如,数据分析、机器学习、深度学习等等。
但是,当想要实现一套完整的应用,用于面相其他用户提供交互时就比较困难了,把Python代码直接打包给其他人用显然是不合理的。
话说回来,作为一名Python开发同学,本职工具就应该聚焦于数据、算法处理方面,如果再额外学前端、应用部署等内容成本就会高很多。
今天就来给大家介绍一款Python开源工具包,能够轻松解决这个问题,快速实现完整应用的搭建。
Taipy
Taipy是一个开源的Python工具包,可以用于构建Web应用程序的前端和后端,使用非常简单,目前在Github已经有超过1.1K Star。
下面就来介绍一下这款工具到底该如何使用。
安装
和Python其他工具包一样,可以直接通过pip命令进行安装:
$ pip install taipy
简单示例
通过上面一行命令就完成安装了,下面通过一个简单示例来看一下它如何使用。
from taipy import Gui
excitement_page = """
# Welcome to Taipy
### How excited are you to try Taipy?
<|{excitement}|slider|min=1|max=100|>
My excitement level: <|{excitement}|>
"""
excitement = 100
Gui(page=excitement_page).run()
这里简单解释一下上面代码,首先是导入taipy工具包,然后定义一个页面,这个页面包含几部分信息:
- 一级标题
- 三级标题
- 滑动条
- 变量显示
然后运行代码就可以了。
场景
通过前面的例子已经大概知道Taipy这款工具包怎么用了,下面来介绍一个Taipy中非常重要的概念:场景。
Taipy场景(Scenario)表示具有一致数据和参数的业务问题,场景包含可提交执行的有向无环图(或DAG), 场景DAG是一组将数据节点连接在一起的任务。 它也可以通过定义一个序列来分解成更小的图来执行。
序列是从场景的任务集派生的连接任务的子集,形成了可以与场景DAG分开提交的较小的可执行DAG。
场景还可以包含一组不属于场景DAG的附加数据节点,表示与场景相关的附加数据。
下面就通过代码实现实现一套场景执行图:
def filter_genre(initial_dataset: pd.DataFrame, selected_genre):
filtered_dataset = initial_dataset[initial_dataset['genres'].str.contains(selected_genre)]
filtered_data = filtered_dataset.nlargest(7, 'Popularity %')
return filtered_data
结果:
最佳实践
到这里,已经对UI创建、场景这些基本用法有了基本的认识,下面就来上升一下,全面的实现一套应用程序。
下面,首先实现场景创建过程:
import taipy as tp
import pandas as pd
from taipy import Config, Scope, Gui
# Taipy场景和数据管理
# 筛选函数
def filter_genre(initial_dataset: pd.DataFrame, selected_genre):
filtered_dataset = initial_dataset[initial_dataset["genres"].str.contains(selected_genre)]
filtered_data = filtered_dataset.nlargest(7, "Popularity %")
return filtered_data
# 加载Taipy配置
Config.load("config.toml")
scenario_cfg = Config.scenarios["scenario"]
# 启动服务
tp.Core().run()
# 创建一个场景
scenario = tp.create_scenario(scenario_cfg)
接下来再定义用户界面:
# Taipy用户界面
# 定义一个回调函数
def on_genre_selected(state):
scenario.selected_genre_node.write(state.selected_genre)
tp.submit(scenario)
state.df = scenario.filtered_data.read()
# 获取候选项列表
genres = [
"Action", "Adventure", "Animation", "Children", "Comedy", "Fantasy", "IMAX"
"Romance","Sci-FI", "Western", "Crime", "Mystery", "Drama", "Horror", "Thriller", "Film-Noir","War", "Musical", "Documentary"
]
# 初始化变量
df = pd.DataFrame(columns=["Title", "Popularity %"])
selected_genre = "Action"
## 定义初始化动作
def on_init(state):
on_genre_selected(state)
# 用户UI定义
my_page = """
# Film recommendation
## Choose your favorite genre
<|{selected_genre}|selector|lov={genres}|on_change=on_genre_selected|dropdown|>
## Here are the top seven picks by popularity
<|{df}|chart|x=Title|y=Popularity %|type=bar|title=Film Popularity|>
"""
Gui(page=my_page).run()
下面按一下结果:
这样就实现了一套完整的web应用,如果有服务器的话还可以进行持久化部署,感兴趣的同学可以试一下。