(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中) (2)

app3.py

import dash import dash_html_components as html import dash_bootstrap_components as dbc app = dash.Dash(__name__) app.layout = html.Div( dbc.Container( dbc.Table( [ html.Thead( html.Tr( [ html.Th('字段1'), html.Th('字段2'), html.Th('字段3'), html.Th('字段4'), ] ) ), html.Tbody( [ html.Tr( [ html.Th('1'), # style设置水平居中 html.Td('colSpan=2', colSpan=2, style={'text-align': 'center'}), html.Td('test'), ] ), html.Tr( [ html.Th('2'), html.Td('test'), # style设置垂直居中 html.Td('rowSpan=2', rowSpan=2, style={'vertical-align': 'middle'}), html.Td('test') ] ), html.Tr( [ html.Th('3'), html.Td('test'), html.Td('test') ] ) ] ) ], striped=True, bordered=True ), style={ 'margin-top': '50px' # 设置顶部留白区域高度 } ) ) if __name__ == '__main__': app.run_server(debug=True)

(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

图6 2.2 快速表格渲染 2.2.1 利用列表推导快速渲染静态表格

通过前面的内容,我们知晓了在Dash中如果渲染一张带有样式的静态表格,而日常需求中,面对批量的数据,我们当然不可能手动编写整张表对应的代码,对于数量较多的表格,我们可以配合Python中常用的列表推导来实现。

  比如下面的例子:

app4.py

import dash import dash_html_components as html import dash_bootstrap_components as dbc import pandas as pd import numpy as np fake_df = pd.DataFrame(np.random.rand(1000).reshape(200, 5)) fake_df.rename(lambda s: f'字段{s}', axis=1, inplace=True) # 批量格式化列名 app = dash.Dash(__name__) app.layout = html.Div( dbc.Container( dbc.Table( [ html.Thead( html.Tr( [html.Th('行下标', style={'text-align': 'center'})] + [ html.Th(column, style={'text-align': 'center'}) for column in fake_df.columns ] ) ), html.Tbody( [ html.Tr( [html.Th(f'#{idx}', style={'text-align': 'center'})] + [ html.Td(row[column], style={'text-align': 'center'}) for column in fake_df.columns ] ) for idx, row in fake_df.iterrows() ] ) ], striped=True, bordered=True ), style={ 'margin-top': '50px' # 设置顶部留白区域高度 } ) ) if __name__ == '__main__': app.run_server(debug=True)

  在生成表头和每行内容时应用列表推导,使得我们的代码更加简洁。

(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

图7 2.2.2 利用from_dataframe()快速渲染表格

  上述的列表推导方式虽说已经简洁了很多,但dash_bootstrap_components还提供了Table.from_dataframe()方法,可以直接传入pandas数据框来快速制作简易的静态表格。

  它的样式相关参数与dbc.Table()一致,缺点是自定义表格内部元素样式的自由度没有前面列表推导高:

app5.py

import dash import dash_html_components as html import dash_bootstrap_components as dbc import pandas as pd import numpy as np fake_df = pd.DataFrame(np.random.rand(1000).reshape(200, 5)) fake_df.rename(lambda s: f'字段{s}', axis=1, inplace=True) # 批量格式化列名 app = dash.Dash(__name__) app.layout = html.Div( dbc.Container( # 一行代码渲染静态表格 dbc.Table.from_dataframe(fake_df, striped=True), style={ 'margin-top': '50px' # 设置顶部留白区域高度 } ) ) if __name__ == '__main__': app.run_server(debug=True)

(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

图8 3 自制简易的数据库查询系统

  在学习了今天的内容之后,我们就可以创建很多以表格为主体内容的web应用,典型如数据库查询系统,我们以Postgresql为例,配合pandas与sqlalchemy的相关功能,来快速打造一个简单的数据库查询系统。

  首先将本期附件中的所有数据表利用下面的代码导入目标数据库中:

(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

图9

(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

图10

  接着只需要配合Dash,短短的几十行代码就可以实现下面的效果:

(数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

图11

  对应代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsssww.html