Shu's Garden - web
type: channel
link: https://www.sitstars.com/tag/web/
items: python web可视化框架Dash介绍与使用
items: python简单进阶之web框架：fastapi使用教程
items: 【译】11个新的python web框架

python web可视化框架Dash介绍与使用
type: item
date: 2021-01-19T22:31:32+08:00
description: 前言之前工作的时候，需要写一个日内交易信号监控软件，预计的功能是实时更新数据，出现信号时有提示功能（比如颜色变化和声音提醒）。如果可能的话最好也有可视化功能。我第一时间就想到了plotly同家出品的Dash，它是一个python Web可视化框架库，之前就有兴趣学，但是因为懒所以一直没有入手。需求来了才开始看文档，边看边翻译、实践，花了几天就写出了一个简单的网站。我个人还是挺满意的，所以也打算出一期教程介绍一下Dash。先把之前翻译的文档放上来把，之后有时间就讲一些高级用法。下文均翻译自https://dash.plotly.com/，算是一些比较基础的用法，有些地方可能是机翻的，最好还是去官网看。如果你有html和plotly基础，那入门应该会相当快，没有也没关系，我就不懂html，仿照着官网例子也能写。安装pip install dash布局基本用法首先，使用以下代码创建一个名为 app.py 的文件。import dash import dash_core_components as dcc import dash_html_components as html import plotly.express as px import pandas as pd external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css'] app = dash.Dash(__name__, external_stylesheets=external_stylesheets) # assume you have a "long-form" data frame # see https://plotly.com/python/px-arguments/ for more options df = pd.DataFrame({ "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"], "Amount": [4, 1, 2, 2, 4, 5], "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"] }) fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group") app.layout = html.Div(children=[ html.H1(children='Hello Dash'), html.Div(children=''' Dash: A web application framework for Python. '''), dcc.Graph( id='example-graph', figure=fig ) ]) if __name__ == '__main__': app.run_server(debug=True)然后运行程序$ python app.py访问 http://127.0.0.1:8050/效果如下： 注意：布局由一个“组件”树组成，比如 html.Div 和 dcc.Graph。对于每个 HTML 标记，dash_html_components 库都有一个组件。html.H1(children='Hello Dash')组件在应用程序中生成一个 Hello Dash HTML 元素。并非所有组件都是纯 HTML。dash_core_components 是可交互式高级组件，通过 React.js 库用 JavaScript、HTML 和 CSS 生成。每个组件都是通过关键字属性来描述的。dash 是声明式语法：主要通过这些属性描述应用程序。children 属性是特殊的。按照惯例，它总是第一个属性，这意味着您可以忽略它：html.H1(children='Hello Dash') 等价于 html.H1('Hello Dash')。它还可以包含字符串、数字、单个组件或组件列表。应用程序中的字体看起来与此处显示的字体略有不同。此应用程序使用自定义 CSS 样式表来修改元素的默认样式。您可以在 https://dash.plotly.com/external-resources 中了解更多信息，但现在您可以使用external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css'] app = dash.Dash(__name__, external_stylesheets=external_stylesheets)获得和示例相同的样式。…

python简单进阶之web框架：fastapi使用教程
type: item
date: 2020-04-28T01:08:00+08:00
description: 这是简单进阶教程系列第四篇，本系列文章主要介绍那些可以很快上手的进阶库。我其实学过一段时间Django框架，但是半途而废了，我觉得可能还是简单一点的框架比较适合我吧……官方教程：https://fastapi.tiangolo.com/安装要求 python3.6版本及以上pip install fastapi pip install uvicorn教程第一步from fastapi import FastAPI app = FastAPI() # 创建API实例 @app.get("/") async def root(): return {"message": "Hello World"}代码解释@app.get("/")功能是定义路径操作，代表着访问example.com/时执行GET操作。路径，即网址第一个斜杠到最后的部分，比如https://example.com/items/foo的路径就是/items/foo，通常也称为端点或路由操作，即GET，POST，PUT，DELETE等HTTP方法在python中，@something被称为装饰，意味着采用下面的函数进行处理。async def是定义异步函数的方法，你也可以定义为普通函数def简单来说，如果你的程序不需要执行的先后顺序（比如先访问数据库，再返回字典），那么可以用异步，否则的话用普通的函数即可return可以返回dict，list，str，int等等。运行将其复制到main.py，打开cmd，输入uvicorn main:app --reload，即可运行。参数解释。 main：文件main.py。app：main.py内创建的对象app = FastAPI()。--reload：更改代码后服务器重新启动，仅用于开发。打开浏览器输入地址http://127.0.0.1:8000，即可看到成功返回{"message": "Hello World"}输入http://127.0.0.1:8000/docs，即可看到交互式文档；输入http://127.0.0.1:8000/redoc即可看到API文档。路径参数传递参数from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item(item_id): return {"item_id": item_id}使用大括号将输入的参数括起来，即可将同名参数传递给下面的函数。输入http://127.0.0.1:8000/items/foo，返回{"item_id":"foo"}参数类型@app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id}使用def func(para:type)的格式定义参数数据类型。这样也有将输入参数自动进行类型转换的效果，比如http://127.0.0.1:8000/items/3，那么返回的就是个int而不是str。当然如果无法转换也会有友好的错误提示。比如输入http://127.0.0.1:8000/items/fool或http://127.0.0.1:8000/items/3.2都会返回错误创建枚举类from enum import Enum from fastapi import FastAPI class ModelName(str, Enum): alexnet = "alexnet" resnet = "resnet" lenet = "lenet" app = FastAPI() @app.get("/model/{model_name}") async def get_model(model_name: ModelName): if model_name == ModelName.alexnet: return {"model_name": model_name, "message": "Deep Learning FTW!"} if model_name.value == "lenet": return {"model_name": model_name, "message": "LeCNN all the images"} return {"model_name": model_name, "message": "Have some residuals"}如果有好几个预定义参数有相同的数据类型，那么可以使用enum模块，并通过类名.参数名调用。PS：alexnet、resnet、lenet都是机器学习术语，可以换成任何参数。它…

【译】11个新的python web框架
type: item
date: 2019-11-15T22:11:00+08:00
description: 原文地址python已经成为一个构建web服务的热门语言，从粗糙（quick and dirty）的RESTful APIs到成熟的web应用，python正在为数百万计的用户服务。如果你涉及到这些这些领域，你可能已经开始使用某些最热门的web框架了—Django, Flask, Falcon, Tornado, CherryPy等等。但是，过去几年内，一些新的项目正在涌现（many new kids on the block），这些新框架采用了一种全新的方法，重点关注API的性能和表达能力。这是11个最新的Python Web框架的清单，您可以在下一个项目中考虑这些框架。1.SanicSanic称自己为Web服务器和Web框架，代码编写起来很快。它允许使用Python 3.5中添加的async/ await语法（异步/协程），这使您的代码非阻塞（non-blocking）且快速。Sanic利用uvloop和ujson提高性能，但这些软件包是可选的。安装pip install sanichello world例子from sanic import Sanic from sanic.response import json app = Sanic() @app.route('/') async def test(request): return json({'hello': 'world'}) if __name__ == '__main__': app.run(host='0.0.0.0', port=8000)Sanic的github地址2.StarletteStarlette是一种轻量级的ASGI框架，是构建高性能asyncio服务的理想之选，可以用作完整框架或ASGI工具包。配合一些标准库（batteries included），它支持WebSockets，GraphQL，进程内后台任务以及基于request构建的测试客户端。安装pip install starlettehello world例子from starlette.applications import Starlette from starlette.responses import JSONResponse import uvicorn app = Starlette(debug=True) @app.route('/') async def homepage(request): return JSONResponse({'hello': 'world'}) if __name__ == '__main__': uvicorn.run(app, host='0.0.0.0', port=8000)Starlette的github地址3.MasoniteMasonite是一个以开发人员为中心的Python Web框架，致力于实用的开发者工具标准库，它具有许多现成的功能以及完全可扩展的体系结构。它同样有一个简单而高性能的路由引擎，一个简单的迁移系统（该迁移系统消除了迁移的复杂性），以及一个称为Orator的出色Active Record风格的ORM（对象-关系映射）。安装pip install masonite-cliMasonite的github地址4.FastAPIFastAPI是一个现代的高性能Web框架，基于标准Python类型提示，并使用Python 3.6+构建API。它建立在Starlette的基础上，并且是最快的Python框架之一。基于并且完全兼容API的开放标准— OpenAPI（以前称为Swagger）和JSON Schema。安装pip install fastapihello world例子from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}FastAPI的github地址5.Responder同样基于Starlette，Responder的主要理念是将Flask和Falcon的优雅之处整合到一个框架中。它具有内置的生产静态文件服务器，自动压缩响应，本地GraphQL支持以及一个使用request的内置测试客户端。安装pip install responderhello world例子import responder api = responder.API() @api.route("/{greeting}") async def greet_world(req, resp, *, greeting): resp.text = f"{greeting}, world!" if __name…