大家好,我是村长~~ 今日 fastApi 干货来了,文末还有书籍赠送噢~~ 在 fastApi 中可以定义请求体body模型,关于这部分内容可以查看之前的文章 同样的,fastApi 支持在定义路径操作的时候...,使用response_model 参数指明该路径的响应模型 其具有以下特点: 转换为类型声明的输出数据 响应数据的校验 在 OpenAPI 路径操作中,为响应添加 JSON Schema 生成 API...而且,response_model 接收的类型与声明 Pydantic 模型属性的类型,语法完全相同 使用响应模型 先来看下简单的用法,定义一个响应模型 User from pydantic import...,在路径操作装饰器函数中设置 response_model 参数,代码如下: from fastapi import FastAPI app = FastAPI() @app.post("/user...response_model=User) async def create_user(user: User): return user 运行代码,当收到客户端发来的请求后,根据用户的请求,返回对应用户的信息 响应模型参数
添加输出模型 3. 响应模型编码参数 4. response_model_include 和 response_model_exclude 5. 代码复用:继承 6. Union 7....表单参数 learn from https://fastapi.tiangolo.com/zh/tutorial/response-model/ 1. response_model 响应模型 不是 路径参数...response_model=List[Item]) # 装饰器方法的一个参数 async def create_items(item: Item): return [item, item] 响应模型...添加输出模型 输出的时候不给密码,更改响应模型为不带密码的 from typing import Optional, List from fastapi import Cookie, FastAPI,...响应模型编码参数 response_model_exclude_unset 参数 True,输出忽略 未明确设置的 字段 response_model_exclude_defaults=True,忽略跟默认值一样的字段
前言 前面文章写的这么多路径函数最终 return 的都是自定义结构的字典 FastAPI 提供了 response_model 参数,声明 return 响应体的模型 什么是路径操作、路径函数 # 路径操作...uvicorn.run(app="16_Header:app", host="127.0.0.1", port=8080, reload=True, debug=True) 上面代码栗子,请求模型和响应模型都是同一个...因为路径函数的返回值并不是固定的,可能是 dict、数据库对象,或其他模型 但是使用响应模型可以对响应数据进行字段限制和序列化 区分请求模型和响应模型的栗子 需求 假设一个注册功能 输入账号、密码、昵称...、邮箱,注册成功后返回个人信息 正常情况下不应该返回密码,所以请求体和响应体肯定是不一样的 实际代码 from typing import Optional from fastapi import FastAPI...password,所以最终返回的响应数据也不会包含 password FastAPI 通过 Pydantic 过滤掉所有未在响应模型中声明的数据 正确传参的请求结果 查看 Swagger API 文档
FastAPI 系列文章: FastAPI 学习之路(一) FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四)使用pydantic模型做请求体...这次我们来看下响应模型。我们之前看的都是请求模型,请求参数,这次呢,我们看下响应相关的。 正文 我们可以在我们不同的请求路径的返回参数使用响应模型。我们看一个简单的demo。...它接收的类型与你将为 Pydantic 模型属性所声明的类型相同,因此它可以是一个 Pydantic 模型,但也可以是一个由 Pydantic 模型组成的 list,例如 List[Item]。...FastAPI 将使用此 response_model 来: 将输出数据转换为其声明的类型。 校验数据。 在 OpenAPI 的路径操作中为响应添加一个 JSON Schema。...但最重要的是: 会将输出数据限制在该模型定义内。
更多自定义响应类型 JSONResponse ORJSONResponse、UJSONResponse HTMLResponse、PlainTextResponse StreamingResponse、...FileResponse RedirectResponse 作用 返回一个 HTTP 重定向响应 默认情况下使用 307 状态码(临时重定向) 实际代码 from fastapi import FastAPI...from fastapi.responses import RedirectResponse app = FastAPI() @app.get("/typer") async def redirect_typer
更多自定义响应类型 JSONResponse HTMLResponse、PlainTextResponse RedirectResponse StreamingResponse、FileResponse...ORJSONResponse 作用 如果需要提高性能,可以安装并使用 orjson,并将响应设置为 ORJSONResponse 官方介绍:快速、正确的 Python JSON 库,支持 dataclass...、datetime、numpy 注意:仅在 FastAPI 才支持 ORJSONResponse,Starlette 并没有它 pip install orjson response_class 可以在路径操作装饰器上声明...response_class=Response ,然后最终返回的响应数据的类型就是声明的 Response 实际代码 from fastapi import FastAPI from fastapi.responses...) async def get_item(): return [{"item_id": "Foo"}] response_class 将用于定义响应的 media_type 上面的栗子中,Response
更多自定义响应类型 JSONResponse HTMLResponse、PlainTextResponse ORJSONResponse、UJSONResponse RedirectResponse StreamingResponse...作用 采用异步生成器或普通生成器(generator)/迭代器(iterator)流式传输响应数据 实际代码 from fastapi import FastAPI from fastapi.responses...import StreamingResponse file_path = "test.mp4" app = FastAPI() @app.get("/") def main(): # 这是生成器函数...源码 FileResponse 作用 异步流式传输文件作为响应,重点一定是异步的 实际代码 from fastapi import FastAPI from fastapi.responses import...FileResponse file_path = "test.mp4" app = FastAPI() @app.get("/file", response_class=FileResponse
背景 上一篇文章讲了通过 Response 自定义响应,但有一个缺点 如果直接返回一个 Response,数据不会自动转换,也不会显示在文档中 这一节开始讲自定义响应 会讲解多个响应类型 JSONResponse...HTMLResponse、PlainTextResponse ORJSONResponse、UJSONResponse RedirectResponse StreamingResponse、FileResponse 所有响应类都是继承于...Response HTMLResponse 作用 返回一些 HTML 代码 实际代码 from fastapi import FastAPI from fastapi.responses import...text/html,并且会记录在 OpenAPI 中 查看 Swagger API 文档的 Response Header 请求结果 源码 只是声明了下 media_type,其他都没变 返回自定义..." 默认还是 application/json,因为 FastAPI 是使用 JSONResponse 返回响应的
假设返回一个 XML 格式的响应 import uvicorn from fastapi import FastAPI, Response app = FastAPI() @app.get("/legacy
前面一直记录的是请求相关的内容,这篇文章开始记录一下响应相关的内容,包括请求模型和模型继承以及状态码等相关的内容。..._read_keyword_weights(): return {"foo": 2.3, "bar": 3.4} 上面是用Dict声明的一个响应模型,只需要声明键和值的类型,就能直接响应。...定义基本响应模型 # 定义一个基本模型类 class userIn(BaseModel): username: str password: str email: EmailStr...200; 利用FastAPI进行设置 @app06.get("/stu06/statuscode_fastapi",status_code=status.HTTP_200_OK) def stu06...博客链接:FastAPI从入门到实战(10)——响应模型与状态码
这是《小白学FastAPI》系列的第六篇文章。 今天我们主要来聊一聊FastAPI里的响应模型。 可能很多读者朋友不太清楚响应模型是啥,但是我可以举一个很简单的例子让大家明白。...这就是我们今天要讲的响应模型,也就是响应用户请求的模型。...首先我们建立一个User模型: models.py class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key...关于响应模型我建议大家看完本文后,继续阅读官方文档中给出的教程: https://fastapi.tiangolo.com/zh/tutorial/response-model/
一、概述 使用response_model定义 请求一个接口返回来我们客户端可见的东西都是所谓的响应报文,如响应头,响应码,响应内容等。 通常不会那么傻的用户输入什么就返回什么。...以下的官网示例纯粹的演示看: import uvicorn from fastapi import FastAPI from pydantic import BaseModel, EmailStr...通常再定义我们的API返回响应的时候,一般是返回固定JSON格式的,所以可以直接使用定义response_model为一个字典: import uvicorn from fastapi import ...关于响应状态码status_code 通常的一个接口请求完成,如果没有什么异常通常会返回200: 如日志打印出来一样: INFO: 127.0.0.1:58141 - "POST /user/ ...: import uvicorn from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class
定义预期的响应模型class ResponseModel(BaseModel): name: str = Field(..., description = 'user name',...会自动使用 ResponseModel 对返回的数据进行验证,并根据模型的配置(如 exclude 和 serialization_alias)序列化 JSON 响应 文档自动生成:Swagger...UI 和 Redoc 文档会自动显示正确的响应模型,包括字段描述和别名 请求:curl -X 'POST' 'http://127.0.0.1:18081/async' -H 'accept:...,对所有操作都有基本的影响 如果一个字段在模型中被设置为 exclude=True,那么无论路由级别的设置如何,这个字段都不会被包括在任何响应中 FastAPI 的 response_model_include...,FastAPI 不会对其内容进行进一步的处理或修改 这种方法特别适用于以下场景: 自定义响应:当你需要完全控制返回的 HTTP 响应的内容和格式时。
FastAPI 系列文章: FastAPI 学习之路(一) FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四)使用pydantic模型做请求体...FastAPI 学习之路(十一) FastAPI 学习之路(十二)额外数据类型 FastAPI 学习之路(十三)Cookie 参数,Header参数 FastAPI 学习之路(十四)响应模型 前言...我们之前分享的是是请求模型,请求参数,这次呢,我们看下响应状态码相对应的。...100 及以上状态码用于「消息」响应。你很少直接使用它们。具有这些状态代码的响应不能带有响应体。 200 及以上状态码用于「成功」响应。这些是你最常使用的。...此响应在没有内容返回给客户端时使用,因此该响应不能包含响应体。 300 及以上状态码用于「重定向」。具有这些状态码的响应可能有或者可能没有响应体,但 304「未修改」是个例外,该响应不得含有响应体。
前言 和指定响应模型一样,可以在任何路径操作中添加参数 status_code,用于声明响应的 HTTP 状态码 @app.get() @app.post() @app.put() @app.delete...www.cnblogs.com/poloyy/ # time: 2021/9/21 10:27 下午 # file: 18_status_code.py """ import uvicorn from fastapi...import FastAPI app = FastAPI() @app.post("/items/", status_code=201) async def create_item(name:...import status 如果是 IntEnum,可以使用 ,是一个 int 类型的枚举类 from http import HTTPStatus status 的栗子 from fastapi...) async def create_item(name: str): return {"name": name} status_code 的作用 在响应中返回该状态代码 在 OpenAPI Schema
import FastAPI, Response app = FastAPI() @app.get("/item") # 路径操作函数声明一个 Response 类型的参数 async def...response.set_cookie("test_token", "tokenABC") return {"name": "设置Cookie"} 然后可以像往常一样返回需要的任何对象(字典、数据库模型等...) 如果声明了一个 response_model,它仍将用于过滤和转换返回的对象 FastAPI 将使用该临时响应来提取 cookie(还有 headers、status_code),并将它们放入包含返回值的最终响应中...import FastAPI, Response, Depends from pydantic import BaseModel app = FastAPI() class Item(BaseModel...import FastAPI, Response from fastapi.responses import JSONResponse app = FastAPI() @app.get("/items
import FastAPI, Response app = FastAPI() @app.get("/item") # 路径操作函数声明一个 Response 类型的参数 async def...@#%#$^$%&" return {"name": "设置 headers"} 然后可以像往常一样返回需要的任何对象(字典、数据库模型等) 如果声明了一个 response_model,它仍将用于过滤和转换返回的对象...FastAPI 将使用该临时响应来提取 headers(还有 cookies、status_code),并将它们放入包含返回值的最终响应中,由任何 response_model 过滤 还可以在依赖项中声明...Response 参数,并在其中设置 headers、cookies 请求结果 声明 response_model 和使用依赖项的栗子 from fastapi import FastAPI, Response...import FastAPI, Response from fastapi.responses import JSONResponse app = FastAPI() @app.get("/items
定义数据模型在FastAPI中,我们可以使用Python的标准类型注释来定义数据模型。...数据模型继承在FastAPI中,我们可以使用数据模型继承来重用字段和方法。...如果请求体中的数据与User模型不兼容,FastAPI将自动返回400 Bad Request响应,并提供有用的错误消息。数据模型文档在FastAPI中,我们可以使用数据模型来自动生成文档。...数据模型序列化在FastAPI中,我们可以使用数据模型来自动序列化输出数据。当我们返回一个数据模型对象时,FastAPI将自动将其转换为JSON格式,并在响应中返回。...当我们返回user对象时,FastAPI将自动将其转换为JSON格式,并在响应中返回。这使得序列化输出数据变得非常简单和方便。
前言 前面我们介绍的 FastApi 响应体都是使用不同的结构体进行的,有 str、list、json 等,但是这在前后台分离的场景下是不友好的。...为了方便前端处理,我们一般会使用统一的数据结构作为响应。 分析 针对常用的响应码,我们可以封装符合自己业务需求的结构体。比如自定义响应码,自定义 message 等。...呆猫 封装响应体 mycode.py from fastapi import status from fastapi.responses import JSONResponse from typing...response_fengzhuang.py from fastapi import FastAPI, Request from fastapi.responses import RedirectResponse...,JSONResponse import uvicorn import time from resp_code import mycode app = FastAPI() # 为app增加接口处理耗时的响应头信息
读完需要4分钟 速读仅需 2 分钟 / python 大型项目之自定义 fastapi 项目架构(完结) / 平时无论是聊技术还是面试我想大家或多或少都会说,我的这个项目是基于 Django 框架开发的...的时候我们在官网或者网上找一个例子就会发现启动一个项目就简简单单的一个 py 文件就能完成请求和响应内容,是太简单了么?...managers:这个文件存放的基本都是操作数据库相关处理业务的复杂业务逻辑基本都会在这里处理 middlewares:这个文件主要存放我们的自定义的中间件,比如我们有些公共的中间件做限流的、做分流的都可以在这个文件夹中得以体现...responses:这个文件主要是对我们返回给前端、客户端的接口数据结构进行格式化和自定义处理 routes:这个文件件主要是我们的路由转发,对来自前端、客户端的请求进行转发的入口 schemas:这个文件主要存放的是我们各个接口的入参...4 fastapi 项目总结 1.本节主要是分享了一下 fastapi 中关于项目组织的相关内容,让大家在构建基于 fastapi 的大型项目的时候能心中有数 2.本节也是 fastapi 相关内容的最后一节