fastapi总结 1

1  带类型的路径参数:就是函数参数定义具有类型声明

2 数据转换:就是fastapi 会将URL中的str按照参数类型声明自定转换

3 数据验证:当数据转换失败是就会报错

4 文档:自动的,交互式的api文档

5 基于标准的好处,替代文件:就是替代的api文档

6 pydantic:所有数据验证都由pydantic再后台执行。

7 路径顺序:后台识别 /users/me 和 /users/{user_id} 时,根据定义的顺序派发

8 预定义值: 就是接受的url参数必须是预定义好的enum中的值,同时检查文档会列举出可用的枚举值。

9 包含路径的路径参数:就是参数仍然是一个路径。/files/{home/johndoe/myfile.txt.}

10 openapi支持: openapi不支持函数参数声明 类型为路径参数,但人可以使用starlette的内部工具进行操作

11 路径转换器:starlette使用路径参数时,在url中声明路径参数类型:/files/{file_path:path}

@ 查询参数:当你声明不属于路径参数的其他函数参数时,他们会自动解释为查询参数 url声明中没有参数,但在使用url时 可以通过在 URL后面的?加一组键值对,由&字符分隔多个参。http://127.0.0.1:8000/items/?skip=0&limit=10

@ 默认值:由于查询参数不是路径的固定部分,它们可以是可选的并且可以具有默认值。

@可选参数:您可以声明可选的查询参数,方法是将其默认设置为None,等同于默认值就是None的情况,但要使用Optional[str]=None

@理解路径参数和查询参数

@查询参数类型转换:就是根据你参数声明的类型进行格式转换,特别注意代表True的有1,True,true,on,yes以及其他大小写变化情况。

@多个路径和查询参数:就是在url路径中有多个查询参数。 @app.get("/users/{user_id}/items/{item_id}")

@必须的查询参数:但是当你想让一个查询参数成为必需时,你可以不声明任何默认值:

@ 请求正文是什么?就是游览器发送到你api接口的数据,但注意不是url。

@pydantic model的作用:就是为了替代函数的参数声明,必须,默认,可选参数声明都是一样的

@ pydantic model只能通过查询参数声明吗,能否进行路径参数声明?

@ 使用model时

  • 将请求正文读取为 JSON。
  • 转换相应的类型(如果需要)。
  • 验证数据。
  • 如果数据无效,它将返回一个很好且清晰的错误,指出错误数据的确切位置和内容。
  • 在参数中给你接收到的数据item
  • 当您在函数中将其声明为 type 时Item,您还将拥有所有属性及其类型的所有编辑器支持(完成等)。
  • 为您的模型生成JSON 模式定义,如果对您的项目有意义,您也可以在任何其他您喜欢的地方使用它们。
  • 这些模式将是生成的 OpenAPI 模式的一部分,并由自动文档UI 使用。

@自动文档:model的json模式会在api文档中显示出来

@编辑器对model的支持:在pycharm中下载pydantic插件,更好的帮助

@在函数内部,你可以直接访问model的所有属性

@ 请求正文+路径参数:FastAPI会识别出匹配路径参数的函数参数应该从路径中获取,声明为 Pydantic 模型的函数参数应该从请求体中获取。

@请求正文+路径+查询参数:函数参数将被识别如下:

  • 如果参数也在path 中声明,它将用作路径参数。
  • 如果参数是一个的单一类型(如intfloatstrbool,等等)将被解释为一个查询参数。
  • 如果参数被声明为Pydantic 模型的类型,它将被解释为请求正文

@ 使用query 作为参数声明的附加信息和验证信息:

async def read_items(q: Optional[str] = Query(None, max_length=50)):

        pass

@ 参数添加正则表达式

async def read_items( q: Optional[str] = Query(None,max_length=50, regex="^fixedquery$")):

        Pass

@ query也可以有默认值(不是None),具有默认值使参数成为可选的:

async def read_items(q: str = Query("fixedquery", min_length=3)):

        Pass

@query成为必须参数,使用 … 作为第一个参数即可

@查询参数列表/多个值

async def read_items(q: Optional[List[str]] = Query(None)): 可以在url中多次出现q 查询参数

要声明类型为list的查询参数,如上面的示例,您需要显式使用Query,否则它将被解释为请求正文。

@查询参数列表具有多个值:

async def read_items(q: List[str] = Query(["foo", "bar"])):

@ 使用query 添加更过的附加信息:包括title,desciption,别名(用于声明url可用,但python不支持的变量声明),弃用参数(有客户再用,但已经确定不会使用的)

@ query用于查询参数,同理路径参数可以使用path

@path 的所有参数都与query相同

@ path指定路径参数,你可以使用 … 参数,即使你使用了None或默认值,也不会影响任何事情,它仍然使必须的。

@ 根据需要订购参数:就是指 函数的参数安排可以没有顺序,fastapi会处理好的

@ python 函数*号后面的参数都会作为关键字参数调用,即使它们没有默认值

@ query和path的数字约束,ge,大于等于,gt、le。浮点数也是这个

@path显示指定路径参数,query显示指定查询参数,body显示指定正文参数。默认情况下,奇异值被解释为查询参数,就是声明为 Optional[str] 的变量

@ 混用path、query,model,model是从请求正文中取出的

@ url中可以插入json正文

@默认情况下,奇异值被解释为查询参数,如果你希望参数是保存在主体而不是作为一个查询参数,你就可以使用body声明

@app.put("/items/{item_id}")

 async def update_item( *, item_id: int, user: User, importance: int = Body(..., gt=0), q: Optional[str] =None ):

其中item_id为路径参数,user为主体,importance为主体,q为查询(因为他是奇异值)

@ 默认情况,model期望一个主体,但如果你希望一个带有键的 JSONitem时(默认没有键,就是直接是参数),可以使用body参数中的embed。

@fastapi中的body参数 对应于pydantic中的field参数。作用为为模型属性声明额外的验证和元数据

@FieldQuery,Path和 的工作方式相同Body,它具有所有相同的参数等。

@ 使用FastAPI,您可以定义、验证、记录和使用任意深度嵌套的模型(感谢 Pydantic)。

@使用List[str] 指定参数类型为包含str的 list, List定义在typing模块中,同理可以使用Set,Dic

@ Pydantic 模型的每个属性都有一个类型。这个类型还可以是Pydantic 类型,同时嵌套的声明也会得到编辑器支持,数据转换,验证和自动化文档等

@ pydantic具有一些特殊类型和验证,比如说HttpUrl类型而不是str类型。具体请看:https://pydantic-docs.helpmanual.io/usage/types

@ 如果你期望函数参数json主体是list而不是dict(默认),可以在函数声明时将model用列表括起来,而不是直接声明model

@ 定义函数参数类型为一个dict:weights: Dict[int, float] 时,可以接受任意的json主体,(Pydantic 模型就是这种情况),如果你想接受你不知道的key,这非常有用

@ 请记住,JSON 仅支持str作为键。但是 Pydantic 有自动数据转换。这意味着,即使您的 API 客户端只能将字符串作为键发送,只要这些字符串包含纯整数,Pydantic 就会转换它们并验证它们。

@ 你可以声明你的接口可以接收的数据示例。主要目的就是为了显示在自动文档中。

@ pydantic模型可以使用field参数中的example字段定义 示例,和model中定义一致。

@ path,query,header,cookie,body,form,file, 参数都可以定义example

@允许定义多个example

 

@ 可以使用以下特殊类型: uuid(在请求和响应中将表示为str),datetime(python模块datetime中的),date(python模块datetime中的),time(python模块datetime中的),timedelta,frozenset(就是set),bytes(在请求和响应中都是str),decimal(请求与响应等同float),以及其他pydantic数据类型。

@这些类型在python及其model中都可以使用

@可以像query和path参数一样定义cookie参数

@ 声明cookie参数后,你必须使用cookie,否者参数将会被解释为查询参数。

@ 像quey,path和cookie一样定义header参数。

@声明header后,你必须使用Header,否者参数将会被解释为查询参数

@多数标头具有减号‘--’,但是这样的变量在python中是无效的,所以header参数将会把下划线转化为减号以提取和记录标头。

@http标头不区分大小写

@通过设置header的convert_underscores字段禁用fastapi的 自动转换。

@请记住某些http代理服务器不允许使用带下划线的标头

@重复的标题:使用list + str 接收重复的标头


版权声明:本文为mutao1127877836原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。