| 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装饰器缓存计算密集型任务阅读原文:原文链接