赞
踩
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
它具有如下这些优点:
pip install fastapi
ASGI 服务器可以使用uvicorn:
pip install uvicorn[standard]
创建一个 main.py
文件并写入以下内容:
from typing import Optional from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return { "Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: Optional[str] = None): return { "item_id": item_id, "q": q}
启动服务器:
uvicorn main:app --reload
访问URL:http://127.0.0.1:8000/items/5?q=somequery,你将会看到如下 JSON 响应:
{"item_id": 5, "q": "somequery"}
访问URL:http://127.0.0.1:8000/docs,你会看到自动生成的交互式 API 文档,由Swagger UI 生成:
访问URL:http://127.0.0.1:8000/redoc,你会看到另一个自动生成的文档(由ReDoc生成):
使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量":
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {
"item_id": item_id}
路径参数item_id
的值将作为参数item_id
传递给你的函数。声明不属于路径参数的其他函数参数时,它们将被自动解释为"查询字符串"参数:
from fastapi import FastAPI app = FastAPI() fake_items_db = [{ "item_name": "Foo"}, { "item_name": "Bar"}, { "item_name": "Baz"}] @app.get("/items/") async def read_item(skip: int = 0, limit: int = 10): return fake_items_db[skip : skip + limit]
查询字符串是键值对的集合,这些键值对位于 URL 的?
之后,并以&
符号分隔。
可以使用Query对查询进行额外的校验:
from typing import Optional from fastapi import FastAPI, Query app = FastAPI() @app.get("/items/") async def read_items(q: Optional[str] = Query(None, max_length=50)): results = { "items": [{ "item_id": "Foo"}, { "item_id": "Bar"}]} if q: results.update({ "q": q}) return results
Query 有如下这些字段校验:
...
表示是必需的Path和Query用法一样,也能对查询字段进行校验。
而且你还可以声明数值校验:
from fastapi import FastAPI, Path, Query app = FastAPI() @app.get("/items/{item_id}") async def read_items( *, item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000), q: str, size: float = Query(..., gt=0, lt=10.5) ): results = { "item_id": item_id} if q: results.update({ "q": q}) return results
gt
:大于ge
:大于等于lt
:小于le
:小于等于类似的还有Cookie:
from typing import Optional
from fastapi import Cookie
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。