2、零基础Apifox测试FastAPI接口入门——POST请求(路由分配、FastAPI的/docs接口文档初识应用、Pydantic数据校验)

第一篇链接: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

在这里定义的UserAddr都是继承了一个基类型BaseModel,然后可以在UserAddr中定义我需要校验的数据,最简单的就是定义某个参数为某个类型,例如:

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
在这里插入图片描述

上一篇:(2024最新完整详细版)Docker部署MinIO


下一篇:股票量化实时行情接口WebSocket接入Python封装