30天學(xué)會(huì)Python編程:28.Python Web應(yīng)用開(kāi)發(fā)全??蚣苓x型參考
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
|
Streamlit | ||||||
Dash | ||||||
Taipy | ||||||
NiceGUI | ||||||
Panel | ||||||
Flet | ||||||
Anvil | ||||||
Pynecone |
import flet as ft
def main(page: ft.Page):
# 狀態(tài)管理
counter = ft.Text("0")
def add(e):
counter.value = str(int(counter.value) + 1)
page.update()
# 組件樹(shù)構(gòu)建
page.add(
ft.Row([ft.Icon(ft.icons.ADD), counter]),
ft.FloatingActionButton(icon=ft.icons.ADD, on_click=add)
)
ft.app(target=main)
特點(diǎn):
import streamlit as st
# 會(huì)話狀態(tài)管理
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}")
注意事項(xiàng):
@st.cache_data
優(yōu)化數(shù)據(jù)加載核心機(jī)制:
from dash import Dash, html, Input, Output
app = Dash(__name__)
app.layout = html.Div([
html.H1("實(shí)時(shí)更新示例"),
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__)
# 數(shù)據(jù)加載
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("工單管理系統(tǒng)", 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):
# 工單創(chuàng)建邏輯
pass
def main(page: ft.Page):
page.title = "工單系統(tǒng)"
page.add(TicketApp())
ft.app(target=main, view=ft.WEB_BROWSER)
快速原型開(kāi)發(fā):
數(shù)據(jù)科學(xué)應(yīng)用:
企業(yè)級(jí)應(yīng)用:
跨平臺(tái)方案:
性能優(yōu)化法則:
@cache
裝飾器緩存計(jì)算密集型任務(wù)閱讀原文:原文鏈接