FastAPI从入门到实战(7)——请求体函数的参数设置

2023-11-01

上一篇记录了FastAPI中声明请求体的相关内容,本文记录一下零碎的函数特性和参数特性相关内容。

Pydantic schema_extra

可以使用 Configschema_extra 为Pydantic模型声明一个示例:

class City(BaseModel):
    country:str = "中国"
    provence:str = Field(...,example = "四川") # Field可以定义请求体的格式和类型
    citys: Optional[List] = None
    population: int = Field(default=None,title="人口数",ge=1000)

    class Config:
        schema_extra = {
            "example":{
                "country":"中国",
                "provence":"四川",
                "citys":["绵阳","成都","遂宁","..."],
                "population":66666666
            }
        }

image-20221125215909375

Field参数设置

fieldPathQueryBody可以设置default、title等信息;具体参看源码;

def Field(
    default: Any = Undefined,
    *,
    default_factory: Optional[NoArgAnyCallable] = None,
    alias: str = None,
    title: str = None,
    description: str = None,
    exclude: Union['AbstractSetIntStr', 'MappingIntStrAny', Any] = None,
    include: Union['AbstractSetIntStr', 'MappingIntStrAny', Any] = None,
    const: bool = None,
    gt: float = None,
    ge: float = None,
    lt: float = None,
    le: float = None,
    multiple_of: float = None,
    allow_inf_nan: bool = None,
    max_digits: int = None,
    decimal_places: int = None,
    min_items: int = None,
    max_items: int = None,
    unique_items: bool = None,
    min_length: int = None,
    max_length: int = None,
    allow_mutation: bool = True,
    regex: str = None,
    discriminator: str = None,
    repr: bool = True,
    **extra: Any,
)

Body参数设置

BodyPathQuery是一个性质的,分别声明请求体、路径参数、查询参数

# 无 Body 额外参数
@app04.post("/stu04/notbodyfield")
def stu04_not_bdy_field(
        param:Dog
):
    return param


# Body 额外参数
@app04.post("/stu04/bodyfield")
def stu04_bdy_field(
        param:Dog = Body(
            example={
                "name":"小七",
                "age":15,
                "varieties":"泰迪",
                "birthday":date.today()
            }
        )
):
    return param

image-20221125220527054

image-20221125220553476

其他数据类型

目前用的都是常见的数据类型,包括int、float、str、bool等等;

也可以使用其他数据类型,几乎所有Pydantic支持的数据类型都可以:Pydantic-字段类型

也可以参看源码:

__all__ = [
    # annotated types utils
    'create_model_from_namedtuple',
    'create_model_from_typeddict',
    # dataclasses
    'dataclasses',
    # class_validators
    'root_validator',
    'validator',
    # config
    'BaseConfig',
    'ConfigDict',
    'Extra',
    # decorator
    'validate_arguments',
    # env_settings
    'BaseSettings',
    # error_wrappers
    'ValidationError',
    # fields
    'Field',
    'Required',
    # main
    'BaseModel',
    'create_model',
    'validate_model',
    # network
    'AnyUrl',
    'AnyHttpUrl',
    'FileUrl',
    'HttpUrl',
    'stricturl',
    'EmailStr',
    'NameEmail',
    'IPvAnyAddress',
    'IPvAnyInterface',
    'IPvAnyNetwork',
    'PostgresDsn',
    'CockroachDsn',
    'AmqpDsn',
    'RedisDsn',
    'MongoDsn',
    'KafkaDsn',
    'validate_email',
    # parse
    'Protocol',
    # tools
    'parse_file_as',
    'parse_obj_as',
    'parse_raw_as',
    'schema_of',
    'schema_json_of',
    # types
    'NoneStr',
    'NoneBytes',
    'StrBytes',
    'NoneStrBytes',
    'StrictStr',
    'ConstrainedBytes',
    'conbytes',
    'ConstrainedList',
    'conlist',
    'ConstrainedSet',
    'conset',
    'ConstrainedFrozenSet',
    'confrozenset',
    'ConstrainedStr',
    'constr',
    'PyObject',
    'ConstrainedInt',
    'conint',
    'PositiveInt',
    'NegativeInt',
    'NonNegativeInt',
    'NonPositiveInt',
    'ConstrainedFloat',
    'confloat',
    'PositiveFloat',
    'NegativeFloat',
    'NonNegativeFloat',
    'NonPositiveFloat',
    'FiniteFloat',
    'ConstrainedDecimal',
    'condecimal',
    'ConstrainedDate',
    'condate',
    'UUID1',
    'UUID3',
    'UUID4',
    'UUID5',
    'FilePath',
    'DirectoryPath',
    'Json',
    'JsonWrapper',
    'SecretField',
    'SecretStr',
    'SecretBytes',
    'StrictBool',
    'StrictBytes',
    'StrictInt',
    'StrictFloat',
    'PaymentCardNumber',
    'PrivateAttr',
    'ByteSize',
    'PastDate',
    'FutureDate',
    # version
    'compiled',
    'VERSION',
]

源码

# -*- coding: utf-8 -*-
# @Time: 2022/11/25 21:21
# @Author: MinChess
# @File: stu04.py
# @Software: PyCharm
from fastapi import APIRouter,Body
from pydantic import BaseModel,Field
from typing import Optional,List

from datetime import date

app04 = APIRouter()

# 创建一个数据模型
class City(BaseModel):
    country:str = "中国"
    provence:str = Field(...,example = "四川") # Field可以定义请求体的格式和类型
    citys: Optional[List] = None
    population: int = Field(default=None,title="人口数",ge=1000)

    class Config:
        schema_extra = {
            "example":{
                "country":"中国",
                "provence":"四川",
                "citys":["绵阳","成都","遂宁","..."],
                "population":66666666
            }
        }

# Pydantic schema_extra

@app04.post("/stu04/schemaextra")
def stu04_schema_extra(
        city:City
):
    return city

# Field 的附加参数
class Dog(BaseModel):
    name:str = Field(example = "小黑")
    age:int = Field(...,description="狗的年龄",gt=0,le=20)
    varieties:str = Field(default="拉布拉多",title="狗的品种")
    birthday:date

# 无 Body 额外参数
@app04.post("/stu04/notbodyfield")
def stu04_not_bdy_field(
        param:Dog
):
    return param


# Body 额外参数
@app04.post("/stu04/bodyfield")
def stu04_bdy_field(
        param:Dog = Body(
            example={
                "name":"小七",
                "age":15,
                "varieties":"泰迪",
                "birthday":date.today()
            }
        )
):
    return param

欢 迎 关 注 博 主 个 人 小 程 序!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastAPI从入门到实战(7)——请求体函数的参数设置 的相关文章

随机推荐

  • 华为OD机试 - 求最小步数(Java)

    题目描述 求从坐标零点到坐标点n的最小步数 一次只能沿横坐标轴向左或向右移动 2 或 3 注意 途径的坐标点可以为负数 输入描述 坐标点n 输出描述 输出从坐标零点移动到坐标点n的最小步数 备注 1 lt n lt 10 9 用例 输入 4
  • Color the ball

    点击打开链接 Problem Description N个气球排成一排 从左到右依次编号为1 2 3 N 每次给定2个整数a b a lt b lele便为骑上他的 小飞鸽 牌电动车从气球a开始到气球b依次给每个气球涂一次颜色 但是N次以后
  • Java内存分析

    程序的内存分配 一个由C C 编译的程序占用的内存分为以下几个部分 1 栈区 stack 由编译器自动分配释放 存放函数的参数值 局部变量的值等 其操作方式类似于数据结构中的栈 2 堆区 heap 一般由程序员分配释放 若程序员不释放 程序
  • 若依前端不分离-代码生成

    1 添加菜单 刷新网页后新建的菜单栏就会出现左侧 2 创建数据库表 需要注意的是 表要创建在工程引用的数据库中 另须注意 给重要的字段添加注释 参考后面第11条 3 在若依界面中导入表结构 4 首先点击编辑 将必须填写的选项补充完整 然后点
  • Android平台上最好的几款免费代码编辑器

    概述 使用正确的开发工具能够快速有效地完成源代码的编写和测试 使编程事半功倍 这里介绍了在Android平台上5款最好的代码编辑器 帮助你作出选择 使用正确的开发工具能够快速有效地完成源代码的编写和测试 使编程事半功倍 在网络信息高速发展的
  • 20230703

  • Linux 小插件 lrzsz epel-release

    装lrzsz的作用 就可以直接把windows上面想要装到linux上的东西直接拖拽就可以了 命令 sudo yum install lrzsz 解释 rz 是 receive zmodem 的缩写 中文含义为 接收ZMODEM 这里的接受
  • Python二级(13)——Python第三方库纵览

    一 知识导图 二 网络爬虫方向 1 网络爬虫是自动进行HTTP访问并捕获HTML页 面的程序 Python语言提供了多个具备网络爬 虫功能的第三方库 这里 仅介绍2个常用的 Python网络爬虫库 r e q u
  • JavaWeb学习笔记 day01 HTML 和 CSS

    文章目录 JavaWeb学习笔记 day01 HTML 和 CSS 1 任务 2 课堂笔记 2 1 B S 软件的结构 2 2 前端的开发流程 2 3 网页的组成部分 2 4 HTML 简介 2 5 创建 HTML 文件 2 6 HTML
  • QT 之 QByteArray

    QByteArray类 提供一个字节数组 QByteArray可用于存储原始字节 包括 0 和传统的8位 0 端接字符串 使用QByteArray比使用const char 更方便 除了QByteArray之外 Qt还提供了QString类
  • 成语学习微信小程序源码

    一个学习成员的小程序 分享给大家学习 体验方式 源码下载 链接 https pan baidu com s 1T1q970BTnQxyflzpSlgp8g 提取码 jfcj
  • element 全局$message使用方法(vue中使用和js中使用)

    main js 内配置 import Message from element ui 挂载到 message上 Vue prototype message Message vue中使用 this message warning 111111
  • 使用ffmpeg转换webm格式到MP4格式

    1 cmd 2 切换到ffmpeg安装目录 cd C Program Files x86 Apowersoft Video Editor Pro 3 输入命令 ffmpeg i D djivideos 004 webm b v 2000k
  • python错误--‘list‘ object is not callable可能的原因之一

    目录 第一 代码 第二 第一 代码 功能说明 用正则表达式匹配数字并对数字进行 1操作 然后替换原数字 str literal books 1000 def add1 match val match group num int val 1
  • ❤️如何用Python绘制一个飞机模型??

    VTK在Java Tcl Python中都有接口 本文介绍VTK在Python中的接口 VTK The Visualization Toolkit 是一款用于计算机3D成像 构建模型 图像处理 容积渲染 科学数据可视化等方面的免费软件系统
  • 手把手教你如何使用iometer测试工具测试存储

    原文链接 http www 56itc com index php archives 303 本文主要介绍为广大服务器和存储厂商采用的磁盘性能测试工具 iometer 在 Linux 和 Windows 平台上的安装使用和测试方法 并且对典
  • do msgbox loop_西门子数字量DO扩展模块SM1222

    西门子数字量DO扩展模块SM1222 上海耿湘自动化设备中心是一家集工控产品销售ATV12P075M3 ATV12P037M3施耐德变频器代理商自动化工程设计 开发 改造为一体的高新科技企业 我公司拥有的队伍 针对多种行业自动化的工艺控制需
  • 第九篇 GoogLeNet——论文翻译

    文章目录 摘要 1 引言 2 近期工作 3 动机和高层思考 4 架构细节 5 GoogLeNet 6 训练方法 7 ILSVRC 2014分类挑战赛设置和结果 8 ILSVRC 2014检测挑战赛设置和结果
  • 中大型企业网络规划设计与网络安全实施实战(附topo实验配置环境)

    用户需求 用户隔离 IT VLAN10 HR VLAN20 主机地址通过DHCP方式获取地址 可以通过手工配置地址方式进行测试 网关部署在汇聚层 网关可以进行备份 冗余 VRRP 根据不同VLAN 进行负载 汇聚交换机互联链路 冗余捆绑 e
  • FastAPI从入门到实战(7)——请求体函数的参数设置

    上一篇记录了FastAPI中声明请求体的相关内容 本文记录一下零碎的函数特性和参数特性相关内容 Pydantic schema extra 可以使用 Config 和 schema extra 为Pydantic模型声明一个示例 class