#安装fastapi的语句
pip install fastapi
#可以使用国内阿里云镜像源进行安装,会快很多,上面的语句变成下面的:
pip install fastapi -i https://mirrors.aliyun.com/pypi/simple
#因为fastapi启动依赖于uvicorn,所以我们还需要安装uvicorn
pip install uvicorn -i https://mirrors.aliyun.com/pypi/simple
验证是否安装成功
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/test")
def read_root():
return {"Hello": "World"}
if __name__ == '__main__':
uvicorn.run(app=app,host="0.0.0.0",port=8080,workers=1)
启动服务
get请求,浏览器访问http://localhost:8080/test
如果你此时访问 http://localhost:8080/docs。你将会看到自动生成的API交互文档。swagger文档
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
这个函数的返回值可以是:
dict,list,单独的值,比如str,int,或者是Pydantic模型
例如我在终端运行uvicorn main:app --reload之后,在浏览器输入127.0.0.1:8000,出现"message": "Hello World"这句话。
在这里可以自己指定要运行的服务器ip和端口号。
使用Python格式字符串的语法声明路径参数,例子
# 参数为ID
@app.get("/test1/{id}")
def test1(id):
return {'id': id}
上述代码运行之后,路径参数 id 的值会作为test1函数参数 id 的值。
swagger中调用响应如下
使用 标准的Python类型注释在函数中声明路径参数的类型,例子:
# 指定参数类型为 int
@app.get("/test2/{id}")
def test2(id: int):
return {'id': id}
上述将参数id的类型定义为int类型
FastAPI会自动为我们做数据校验的功能,所有的数据验证都是由 Pydantic实现的.可以用同样的类型声明比如 str, float, bool 或者其他更复杂的类型
指定参数类型,若不匹配会存在提示
参数类型匹配,可正常通过
我们只想给某个路径参数传递某几个固定的有效值
class Hjx_Class(str, Enum):
name = "joker"
age = 24
id = 1280
student = True
@app.get("/test3/{hjx}")
def test3(hjx: Hjx_Class):
return {"status": hjx}
第一步、创建一个继承str和Enum的类,并创建几个类属性,这些类属性的值将是可用的有效值
第二步、声明路径参数。路径参数hjx_man的值将传递给函数root的参数hjx_man,并且这个值的取值范围只能是Hjx_Class_name类中类属性的值。
限制类型
当你声明不属于路径参数的其他函数参数时,它们将自动解释为“Query”参数,也就是查询参数。
查询参数就是一系列在URL?之后的key-value键值对,每对键值对用 & 分割开来。例如
http://127.0.0.1:8000/items/?skip=0&limit=10
查询参数有两个,一个是skip,一个是limit,它们的值分别为0,10
@app.get("/files/")
def add(num1: int=2, num2 int=8):
return {"num1 + num2 = ": num1 + num2}
当你使用浏览器访问http://127.0.0.1:8080/files/?num1=2&num2=3,你会得到:{"num1 + num2 = ":5}
query参数类不是path中固定的一部分,所以他们是可选的,并且可以有默认值。
例如上面的例子,当你使用浏览器访问http://127.0.0.1:8080/files/,你会得到:{"num1 + num2 = ":10}
声明可选的Query参数,只需要将他们的默认值设置为None即可。
@app.get("/test4/")
def test4(a: str, b: int=None):
return {'a': a, 'b': b}
如何实现请求体Request Body
第一步,从pydantic中导入BaseModel
from pydantic import BaseModel
第二步,创建请求体数据模型
声明请求体数据模型为一个类,且该类继承 BaseModel。所有的属性都用标准Python类。
和查询参数一样:数据类型的属性如果不是必须的话,可以拥有一个默认值或者是可选None。否则,该属性就是必须的。
class Item(BaseModel):
name: str
age: int
# description: str = None
第三步、将模型定义为参数
@app.post("/test5")
def test5(item: Item):
return {"item_name": item.name, "item_age": item.age}
此时请求后响应如下
@app.get("/test6/")
def test6(q: str = None):
results = {"items": 'haha'}
if q:
results.update({"q": q}) # 给字典results添加一个健值对{"q": q}
return results
查询 参数 q 是str 类型, 并且默认为 None, 说明它是可选的
我们将设置:即使 q 是可选的,只要提供了q,它的长度就不能超过5个字符
第一步,导入Query
from fastapi import FastAPI, Query
第二步、使用 Query 设置max_length验证
@app.get("/test7/")
def test7(q: str = Query(None, max_length=5)):
results = {"items": 'hahaha'}
if q:
results.update({"q": q})
return results
因为我们必须用 Query(None) 替换默认值None,所以Query的第一个参数是定义默认值。当默认值为None,也表示这个参数是可选的。当默认值为...,表示这个参数是必选的。
q: str = Query(None, max_length=50) # 可选
q: str = Query(... , max_length=50) # 必选
例如你将默认值设置为’hello word’
q: str = Query('hello word', max_length=50)
转载自: 超全面整理fastAPI(从入门到运用),进来看十秒钟再走不迟_是猪哥不是诸葛的博客-CSDN博客