首页 > 其他分享 >【6.0】Fastapi请求体参数及混合参数

【6.0】Fastapi请求体参数及混合参数

时间:2023-10-01 15:46:42浏览次数:39  
标签:city name default Fastapi 6.0 Field ge 参数 country

【一】说明

  • 项目接上小结

【二】请求体和字段

from fastapi import APIRouter, Path, Query
from pydantic import BaseModel, Field

app03 = APIRouter()

## 请求体字段
class CityInfo(BaseModel):
    # 给 name 字段添加注解
    # ... : 表示必填字段
    # example :表示示例,,只是注解,不会被验证
    name: str = Field(..., example='Beijing')
    country: str
    country_code: str = None
    # 给 country_population 字段进行校验
    # default : 默认值
    # title : 字段标题
    # description : 字段描述
    # ge :大于等于
    country_population: int = Field(default=800, title="人口数量", description="国家人口数量", ge=800)

    # 指定配置
    class Config:
        schema_extra = {
            # 指定默认示例
            "example": {
                "name": "Shanghai",
                "country": "China",
                "country_code": "CN",
                "country_population": 1400000000
            }
        }

【三】定义视图

@app03.post('/request_body/city')
async def city_info(city: CityInfo):
    print(city.name, city.country)
    return city.dict()

【四】发起请求

image-20230929192646525

  • 携带错误的请求体参数

image-20230929192803772

  • 参数正确

image-20230929192851006

【五】多参数混合

【1】定义视图

from fastapi import APIRouter, Path, Query
from typing import List

app03 = APIRouter()

# """Request Body + Path parameters + Query parameters 多参数混合"""
@app03.put('/request_body/city/{name}')
async def mix_city_info(
        # 路径参数
        name: str,
        # 请求体 Body 可以定义多个
        city01: CityInfo,
        city02: CityInfo,
        # 对请求参数进行校验,所以使用 Query
        confirmed: int = Query(ge=0, description="确诊数", default=0),
        death: int = Query(ge=0, description="死亡数", default=0)
):
    if name == "Shanghai":
        return {"Shanghai": {"confirmed": confirmed, "death": death}}
    return city01.dict(), city02.dict()

【2】发起请求

image-20230929231650762

【六】数据格式嵌套的请求体

【1】定义视图

from datetime import date
from pydantic import BaseModel, Field
from fastapi import APIRouter, Path, Query
from typing import List

app03 = APIRouter()

## 请求体字段
class CityInfo(BaseModel):
    # 给 name 字段添加注解
    # ... : 表示必填字段
    # example :表示示例,,只是注解,不会被验证
    name: str = Field(..., example='Beijing')
    country: str
    country_code: str = None
    # 给 country_population 字段进行校验
    # default : 默认值
    # title : 字段标题
    # description : 字段描述
    # ge :大于等于
    country_population: int = Field(default=800, title="人口数量", description="国家人口数量", ge=800)

    # 指定配置
    class Config:
        schema_extra = {
            # 指定默认示例
            "example": {
                "name": "Shanghai",
                "country": "China",
                "country_code": "CN",
                "country_population": 1400000000
            }
        }

class Data(BaseModel):
    # 定义数据格式嵌套的请求体
    city: List[CityInfo] = None
    # 额外的数据类型,还有uuid datetime bytes frozenset等
    # 参考:https://fastapi.tiangolo.com/tutorial/extra-data-types/
    date: date
    confirmed: int = Field(ge=0, description="确诊数", default=0)
    deaths: int = Field(ge=0, description="死亡数", default=0)
    recovered: int = Field(ge=0, description="痊愈数", default=0)


@app03.put('/request_body/nested')
async def nested_models(data: Data):
    return data

【2】发起请求

  • 在请求体的列表类型中,可以加多个参数

image-20230929232404008

标签:city,name,default,Fastapi,6.0,Field,ge,参数,country
From: https://www.cnblogs.com/dream-ze/p/17738892.html

相关文章

  • 【13.0】Fastapi中的Jinja2模板渲染前端页面
    【一】创建Jinja2引擎#必须模块fromfastapiimportRequest#必须模块fromfastapi.templatingimportJinja2Templates#创建子路由application=APIRouter()#创建前端页面配置templates=Jinja2Templates(directory='./coronavirus/templates')#初始化数据库......
  • 【12.0】Fastapi中的数据库SQLAlchemy ORM 操作
    【一】大型项目结构树coronavirus ├─static #静态文件 ├─templates #前端页面 ├─__init__.py #初始化文件 ├─database.py #数据库操作 ├─models.py #数据库表模型类 ├─schemas.py #响应体模型类 ├─curd.py #视图函数 └─main.py #......
  • 【11.0】Fastapi的OAuth2.0的授权模式
    【一】OAuth2.0的授权模式授权码授权模式(AuthorizationCodeGrant)隐式授权模式(ImplicitGrant)密码授权模式(ResourceOwnerPasswordCredentialsGrant)客户端凭证授权模式(ClientCredentialsGrant)【二】密码授权模式【1】FastAPI的OAuth2PasswordBearer说明......
  • FastAPI学习-26 并发 async / await
    前言有关路径操作函数的asyncdef语法以及异步代码、并发和并行的一些背景知识async和await关键字如果你正在使用第三方库,它们会告诉你使用await关键字来调用它们,就像这样:results=awaitsome_library()然后,通过asyncdef声明你的路径操作函数:@app.get('/')asy......
  • After_Effects_2023_23.6.0.62图文安装教程及下载
    After_Effects_2023_23.6.0.62图文安装教程及下载AdobeAfterEffects2023_23.6.0.62(爱国版、一键式安装、永久使用)简称“AE”是Adobe公司推出的一款图形视频处理软件,适用于从事设计和视频特技的机构,包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。最近一次更......
  • axios - get 请求参数传递数组的方式
    npminstallqs导入qs库,如果是TypeScript项目,一同安装npminstall@types/qs。在请求的函数中添加一项配置:file:[demo.ts]const{data}=awaitaxios.get("/flowchart/query/all",{params,lit:[paramsSerializer:params=>{returnqs.stringify(params,......
  • Llama2-Chinese项目:3.1-全量参数微调
      提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示:"<s>Human: "+问题+"\n</s><s>Assistant: "+答案  举个例子,如下所示:<s>Human: 用一句话描述地球为什么是独一无二的。</s><s>Assistant: 因为地球是目前为止......
  • Ubuntu 16.04 上安装 OrientDB!
    这两种模型在如何处理(存储)数据的方面存在着巨大的差异。关系数据库管理系统在关系模型中(如MySQL,或者其分支MariaDB),一个数据库是一个表的集合,其中每个表包含一个或多个以列组织的数据分类。数据库的每行包含一个唯一的数据实例,其分类由列定义。举个例子,想象一个包含客户的表。......
  • golang 代码实现:并发请求下游接口,下游接口限制请求参数中某数组单次最多传20个
    内容来自对chatgpt的咨询假设你有一个golang的数组,数组元素数量大于20,你需要调用下游接口,但是接口的请求参数限制了一次最多传20个,为了节省时间,你需要并发调用,完整整个数组的下游调用,请完成代码编写写法一我们将数组切分成最大20个元素的小块,并对每个块并发调用下游接口:p......
  • 拟合不同的冷却方式(分类变量)下,物料温度加入两个分类变量, 物料类型和冷却方式, 给
    在机器学习中,拟合不同冷却方式下物料温度随时间下降的规律可以使用不同的算法和方法。以下是四种常见的方法,它们可以用来生成数据集、拟合模型、解释参数和输出函数方程,以及解释它们的实际意义。线性回归:方法:线性回归是一种用于拟合线性关系的方法,通过寻找最佳拟合直线来预测温度随......