30天学会Python编程:28.Python Web应用开发全栈框架选型参考
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
|
Streamlit | ||||||
Dash | ||||||
Taipy | ||||||
NiceGUI | ||||||
Panel | ||||||
Flet | ||||||
Anvil | ||||||
Pynecone |
import flet as ft
def main(page: ft.Page):
# 状态管理
counter = ft.Text("0")
def add(e):
counter.value = str(int(counter.value) + 1)
page.update()
# 组件树构建
page.add(
ft.Row([ft.Icon(ft.icons.ADD), counter]),
ft.FloatingActionButton(icon=ft.icons.ADD, on_click=add)
)
ft.app(target=main)
特点:
import streamlit as st
# 会话状态管理
if 'counter' not in st.session_state:
st.session_state.counter = 0
def increment():
st.session_state.counter += 1
st.button("Increment", on_click=increment)
st.write(f"Count: {st.session_state.counter}")
注意事项:
@st.cache_data
优化数据加载核心机制:
from dash import Dash, html, Input, Output
app = Dash(__name__)
app.layout = html.Div([
html.H1("实时更新示例"),
dcc.Input(id='input', value='初始值'),
html.Div(id='output')
])
@app.callback(
Output('output', 'children'),
Input('input', 'value')
)
def update_output(value):
return f'你输入了: {value}'
import dash
from dash import dcc, html
import plotly.express as px
import pandas as pd
from dash.dependencies import Input, Output
app = dash.Dash(__name__)
# 数据加载
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderData.csv')
app.layout = html.Div([
dcc.Dropdown(
id='country-dropdown',
options=[{'label': c, 'value': c} for c in df['country'].unique()],
value=['China', 'India'],
multi=True
),
dcc.Graph(id='gdp-plot')
])
@app.callback(
Output('gdp-plot', 'figure'),
[Input('country-dropdown', 'value')]
)
def update_plot(selected_countries):
filtered_df = df[df['country'].isin(selected_countries)]
return px.line(filtered_df, x='year', y='gdpPercap', color='country')
if __name__ == '__main__':
app.run_server(debug=True)
import flet as ft
import sqlite3
class TicketApp(ft.UserControl):
def __init__(self):
super().__init__()
self.db_conn = sqlite3.connect('tickets.db')
self._create_table()
def _create_table(self):
cursor = self.db_conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS tickets (
id INTEGER PRIMARY KEY,
title TEXT,
description TEXT,
status TEXT
)
''')
self.db_conn.commit()
def build(self):
self.tickets = ft.ListView()
self._refresh_tickets()
return ft.Column([
ft.Text("工单管理系统", size=24),
ft.ElevatedButton("新建工单", on_click=self.new_ticket),
self.tickets
])
def _refresh_tickets(self):
self.tickets.controls.clear()
cursor = self.db_conn.cursor()
for row in cursor.execute("SELECT * FROM tickets"):
self.tickets.controls.append(
ft.ListTile(
title=ft.Text(row[1]),
subtitle=ft.Text(row[3]),
on_click=lambda e, id=row[0]: self.edit_ticket(id)
)
)
self.update()
def new_ticket(self, e):
# 工单创建逻辑
pass
def main(page: ft.Page):
page.title = "工单系统"
page.add(TicketApp())
ft.app(target=main, view=ft.WEB_BROWSER)
快速原型开发:
数据科学应用:
企业级应用:
跨平台方案:
性能优化法则:
@cache
装饰器缓存计算密集型任务阅读原文:原文链接