前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI从入门到实战(7)——请求体函数的参数设置

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

作者头像
MinChess
发布2022-12-27 19:25:10
1.1K0
发布2022-12-27 19:25:10
举报
文章被收录于专栏:九陌斋九陌斋

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

Pydantic schema_extra

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

代码语言:javascript
复制
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
image-20221125215909375

Field参数设置

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

代码语言:javascript
复制
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是一个性质的,分别声明请求体、路径参数、查询参数

代码语言:javascript
复制
# 无 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-20221125220527054
image-20221125220553476
image-20221125220553476

其他数据类型

目前用的都是常见的数据类型,包括int、float、str、bool等等; 也可以使用其他数据类型,几乎所有Pydantic支持的数据类型都可以:Pydantic-字段类型 也可以参看源码:

代码语言:javascript
复制
__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',
]

源码

代码语言:javascript
复制
# -*- 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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pydantic schema_extra
  • Field参数设置
  • Body参数设置
  • 其他数据类型
  • 源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档