FastAPI.2
一、简单的编写基于fastapi的接口
-
创建main.py文件
-
导入fastapi
from fastapi import FastAPI
-
实例化出FastAPI的对象
app = FastAPI()
-
通过装饰器添加路径,
@app.get("/") ''' @app.get("/")的作用:告诉 FastAPI 在它下方的函数负责处理如下访问请求 请求路径:/ 请求方式:get(也可以是post、put、delete、options、head、patch、trace) '''
-
返回内容
# 写法一 @app.get("/") def read_root(): return {"hello": "world"} # 定义返回的内容 # 写法二 @app.get("/") async def read_root(): return {"hello": "world"} # 定义返回的内容 # 返回内容可以是dict,也可以是list, str、int 等都可以。
-
启动
uvicorn main:app --reload
-
小结(六步开启fastapi)
1. 导入 FastAPI。 2. 创建一个 app 实例。 3. 编写一个路径操作装饰器(如 @app.get("/")) 4. 编写一个路径操作函数(如上面的 def root(): ...) 5. 定义返回值 6. 运行开发服务器(如 uvicorn main:app --reload)
二、请求路径
-
在请求路径中增加参数
@app.get("/{name}") def read_root(name): return {"name": name}
-
指定参数类型
@app.get("/{name}") def read_root(name:int): return {"name": name} # 如果携带的不是int类型,http://127.0.0.1:8000/zhang,就返回如下内容: "detail": [ { "loc": [ "path", "name" ], "msg": "value is not a valid integer", "type": "type_error.integer" } ]
-
fastapi路由匹配是按顺序自上而下,如果上面的路由匹配到了不会执行下面的,所以在编写时一定要注意,相同匹配的时候,默认只会按顺序匹配
-
输入规定的数据,返回对应数据 --- 推荐枚举
from enum import Enum class ModelName(str, Enum): zhang = '1' wang = '2' @app.get("/{name}") def name(name: ModelName): if name == '1': return "zhang" if name == '2': return "wang" ''' http://127.0.0.1:8000/zhang 的返回结果如下: "detail": [ { "loc": [ "path", "name" ], "msg": "value is not a valid enumeration member; permitted: '1', '2'", "type": "type_error.enum", "ctx": { "enum_values": [ "1", "2" ] } } ''' ''' http://127.0.0.1:8000/1的返回结果如下: "zhang" ''' ''' http://127.0.0.1:8000/2的返回结果如下: "wang" '''
-
指定路由参数默认值
# 此时请求不携带参数会报错 @app.get("/items/") def read_item(start: int, end: int): return data[start:end] # 指定参数类型为int,不给值就默认start=0,end=2 data=['北京','上海','深圳'] @app.get("/items/") def read_item(start: int = 0, end: int = 2): return data[start:end] # 指定参数类型为int,不给end就默认为none,返回所有 @app.get("/items/") def read_item(start: int = 0, end: Optional[int] =None): if end: return data[start:end] return data[start:-1]