第一篇链接:1、零基础Apifox测试FastAPI接口入门——GET请求
文章目录
- 一、路由分发
- 二、Pydantic数据校验
- 三、FastAPI的/docs文档应用
一、路由分发
项目目录:
程序的启动入口main.py
,在此处导入分发出去的路由:
from fastapi import FastAPI
import uvicorn
from apps.app01 import app01
from apps.app02 import app02
from apps.app03 import app03
app = FastAPI()
app.include_router(app01,tags=['app01 路径参数'])
app.include_router(app02,tags=['app02 查询参数'])
app.include_router(app03,tags=['app03 请求体数据'])
if __name__ == '__main__':
uvicorn.run("main:app",port=8000,reload=True)
使用APIRouter进行路由分配app01.py
:
from fastapi import APIRouter
app01 = APIRouter()
@app01.get("/user/1")
def get_user():
return {
"user_id": "root_user"
}
使用APIRouter进行路由分配app02.py
:
from fastapi import APIRouter
app02 = APIRouter()
@app02.get("/data")
async def get_jobs(kd,xl,gj):
# 基于kd,xl,gj数据库查询岗位信息
return {
# query查询参数
"kd":kd,
"xl":xl,
"gj":gj
}
ps:路由匹配的原则:遵从从上往下的顺序,覆盖匹配,一旦匹配到就不往下走了
二、Pydantic数据校验
Pydantic其实就是有一点类似前端的ts语法,主要就是检验数据的类型是否符合要求,在不符合要求是会尝试进行转换成指定的类型,但是不一定能成功,比如"123"
(str)就能转换成123
(int),但是hello
就没有办法转成(int),会报错422。
这里先把所有的代码贴上来app03.py
:
from fastapi import APIRouter
from pydantic import BaseModel,Field,field_validator
from datetime import date
from typing import List,Union,Optional
app03 = APIRouter()
# 嵌套
class Addr(BaseModel):
province:str
city:str
class User(BaseModel):
# name:str="admin"
# name:str=Field(pattern="^a")
name:str
age:int=Field(default=0,gt=0,lt=100)
birth:Union[date,None] # 默认值
friends:List[int]=[] # 默认值
description:Optional[str] # 默认值
addr:Addr
@field_validator("name")
def name_must_alpha(cls,value):
assert value.isalpha(),'name must be alpha'
return value
@app03.post("/data")
async def data(data:User):
print(data.name,data.age)
print(data.dict())
return data
在这里定义的User
和Addr
都是继承了一个基类型BaseModel
,然后可以在User
和Addr
中定义我需要校验的数据,最简单的就是定义某个参数为某个类型,例如:
class Addr(BaseModel):
province:str
city:str
然后这里还提供了几种数据校验的方法:
class User(BaseModel):
# name:str="admin" # 规定默认值
# name:str=Field(pattern="^a") # 正则校验————必须以a开头
name:str
# 使用Union和Optional来设定默认值和类型
birth:Union[date,None] # 默认值
description:Optional[str] # 默认值
嵌套校验:
# 嵌套
class Addr(BaseModel):
province:str
city:str
class User(BaseModel):
addr:Addr
三、FastAPI的/docs文档应用
进入:
启动main.py
→在浏览器中打开http://127.0.0.1:8000/docs
,进入docs
页面这里以上述给到的app03
代码(发送POST请求、参数携带在body中)
为例:
使用:
点击Try It Out
:
输入需要传输的参数,点击执行:
可以看到已经成功发送,状态码为200
: