范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

10。FastAPI响应体

  10.FastAPI响应体
  FastAPI支持声明响应体模型进行响应数据的处理。 可以在任意路由操作中使用 response_model 参数来声明用于响应的模型: @app.get() @app.post() @app.put() @app.delete() 等等。
  response_model是装饰器方法(get,post 等)的一个参数,而不是路由操作函数的参数;其类型与 Pydantic 模型属性所声明的类型相同,因此它可以是一个 Pydantic 模型,但也可以是一个由 Pydantic 模型组成的 list,例如 List[Item]。
  在FastAPI 中,使用 response_model 的作用: 将输出数据转换为其声明的类型。 校验数据。 在 OpenAPI 的路径操作中为响应添加一个 JSON Schema。 并在自动生成文档系统中使用。 会将输出数据限制在该模型定义内。 10.1响应模型
  代码示例: from fastapi import FastAPI from pydantic import BaseModel  app = FastAPI()  class UsrIn(BaseModel):     name: str     sex: str     acc: str     pwd: str  class UsrOut(BaseModel):     name: str     sex: str     acc: str   @app.post(path="/add_a_usr", response_model=UsrOut) async def add_a_usr(usr: UsrIn):     return usr
  在上面的代码中,输入模型为UsrIn,输出模型为UsrOut,通过输出模型来屏蔽pwd字段的输出。执行请求: curl -H "Content-Type: application/json;" -X POST -d "{"name":"zhaomm","sex":"woman","acc":"zhaomm","pwd":"Zhao68641018"}" http://127.0.0.1:8000/add_a_usr {     "name":"zhaomm",     "sex":"woman",     "acc":"zhaomm" }10.2响应模型默认值
  在FastAPI中,响应模型也可以具有默认值。
  代码示例: from fastapi import FastAPI from fastapi import Body from typing import Optional from typing import List from pydantic import BaseModel  app = FastAPI()  class ProductOut(BaseModel):     id: str = Body(...)     name: str = Body(...)     price: Optional[float] = Body(10.0)     desc: Optional[str] = Body(None)   @app.get(path="/find_products", response_model=List[ProductOut]) async def find_products():     products = [         {"id": "p1", "name": "玫瑰花"},         {"id": "p2", "name": "百合花", "price": 12.8},         {"id": "p3", "name": "月季花", "price": 19.8, "desc": "月季花"}     ]     return products
  执行请求: curl http://127.0.0.1:8000/find_products [     {         "id":"p1",         "name":"玫瑰花",         "price":10.0,         "desc":null     },{         "id":"p2",         "name":"百合花",         "price":12.8,         "desc":null     },{         "id":"p3",         "name":"月季花",         "price":19.8,         "desc":"月季花"     } ]
  从上面的代码执行结果可以看出:当在实际输出中没有定义对应的字段属性值时,使用响应模型的默认值输出。如果希望响应结果中不输出默认值,仅输出实际数据,则可以在 可以设置路由操作装饰器的 response_model_exclude_unset 参数为真,下面代码在路由中增加该参数,代码如下: from fastapi import FastAPI from fastapi import Body from typing import Optional from typing import List from pydantic import BaseModel  app = FastAPI()  class ProductOut(BaseModel):     id: str = Body(...)     name: str = Body(...)     price: Optional[float] = Body(10.0)     desc: Optional[str] = Body(None)   @app.get(path="/find_products", response_model=List[ProductOut], response_model_exclude_unset=True) async def find_products():     products = [         {"id": "p1", "name": "玫瑰花"},         {"id": "p2", "name": "百合花", "price": 12.8},         {"id": "p3", "name": "月季花", "price": 19.8, "desc": "月季花"}     ]     return products
  执行请求: curl http://127.0.0.1:8000/find_products [     {         "id":"p1",         "name":"玫瑰花"     },{         "id":"p2",         "name":"百合花",         "price":12.8     },{         "id":"p3",         "name":"月季花",         "price":19.8,         "desc":"月季花"     } ]
  在以上情况下,如果实际数据值与默认值相同,那么FastAPI仍然会输出,也就是说,当设置response_model_exclude_unset=True时,其输出是按照实际值输出的。下面将代码{"id": "p2", "name": "百合花", "price": 12.8}中的price字段值修改为10.0,然后执行请求: curl http://127.0.0.1:8000/find_products [     {         "id":"p1",         "name":"玫瑰花"     },{         "id":"p2",         "name":"百合花",         "price":10.0     },{         "id":"p3",         "name":"月季花",         "price":19.8,         "desc":"月季花"     } ]
  从上面的执行结果可以看出:虽然实际数据值与默认值相同,但仍然会输出。如果此时,不希望输出与默认值相同的数据值,可以设置 response_model_exclude_defaults参数为True,代码片段如下: class ProductOut(BaseModel):     id: str = Body(...)     name: str = Body(...)     price: Optional[float] = Body(10.0)     desc: Optional[str] = Body(None)  @app.get(path="/find_products", response_model=List[ProductOut], response_model_exclude_defaults=True) async def find_products():     products = [         {"id": "p1", "name": "玫瑰花"},         {"id": "p2", "name": "百合花", "price": 10.0},         {"id": "p3", "name": "月季花", "price": 19.8, "desc": "月季花"}     ]     return products
  执行请求: curl http://127.0.0.1:8000/find_products [ 	{ 		"id":"p1", 		"name":"玫瑰花" 	},{ 		"id":"p2", 		"name":"百合花" 	},{ 		"id":"p3", 		"name":"月季花", 		"price":19.8, 		"desc":"月季花" 	} ]
  在上面的执行结果中:{"id":"p2","name":"百合花"}没有输出price字段的实际数据值,因为与默认值相同。
  另外还有一个装饰器参数: response_model_exclude_none,如果设置该参数为True,则表示在响应模型中不输出None值。代码片段如下: @app.get(path="/find_products", response_model=List[ProductOut], response_model_exclude_none=True) async def find_products():     products = [         {"id": "p1", "name": "玫瑰花"},         {"id": "p2", "name": "百合花", "price": 10.0},         {"id": "p3", "name": "月季花", "price": 19.8, "desc": "月季花"}     ]     return products
  执行请求: curl http://127.0.0.1:8000/find_products [ 	{ 		"id":"p1", 		"name":"玫瑰花", 		"price":10.0 	},{ 		"id":"p2", 		"name":"百合花", 		"price":10.0 	},{ 		"id":"p3", 		"name":"月季花", 		"price":19.8, 		"desc":"月季花" 	} ] 10.3显式声明响应模型的字段
  可以使用装饰器参数response_model_include 和 response_model_exclude来显式指明包含或者排除的字段,这两个参数接受由字符串组成的set类型,也可以使用list或tuple,但使用list或tuple最终会转换为set类型。
  在Python中,set类型使用一组花括号定义,如:{"sex", "name"}。
  代码示例: @app.get(path="/find_products", response_model=List[ProductOut], response_model_include={"price", "desc"}) async def find_products():     products = [         {"id": "p1", "name": "玫瑰花"},         {"id": "p2", "name": "百合花", "price": 10.0},         {"id": "p3", "name": "月季花", "price": 19.8, "desc": "月季花"}     ]     return products
  执行请求: curl http://127.0.0.1:8000/find_products [ 	{ 		"price":10.0, 		"desc":null 	},{ 		"price":10.0, 		"desc":null 	},{ 		"price":19.8, 		"desc":"月季花" 	} ] 10.4响应模型Union
  在FastAPI中,响应模型可以设置为多个类型的Union,响应为多种类型中的一种;定义该类型使用标准的Python类型提示typing.Union,原则上应该是先使用详细的类型,然后使用粗略的类型。代码示例: from typing import Union from fastapi import FastAPI from pydantic import BaseModel  app = FastAPI()  class BaseItem(BaseModel):     description: str     type: str  class CarItem(BaseItem):     type = "car"     length: int  class PlaneItem(BaseItem):     type = "plane"     size: int  items = {     "item1": {"description": "All my friends drive a low rider", "type": "car", "length": 200},     "item2": {         "description": "Music is my aeroplane, it"s my aeroplane",         "type": "plane",         "size": 5,     }, }   @app.get("/items/{item_id}", response_model=Union[PlaneItem, CarItem]) async def read_item(item_id: str):     return items[item_id]
  执行请求: curl http://127.0.0.1:8000/items/item1 { 	"description":"All my friends drive a low rider", 	"type":"car", 	"length":200 } C:UsersAdministrator>curl http://127.0.0.1:8000/items/item2 { 	"description":"Music is my aeroplane, it"s my aeroplane", 	"type":"plane", 	"size":5 } 10.5任意 dict 构成的响应
  在FastAPI中,如果事先不确定返回值的键名称,但可以确定返回的数据类型,那么,可以使用只包含类型的dict作为响应模型,使用 typing.Dict。示例代码如下: from fastapi import FastAPI from typing import Dict  app = FastAPI()  @app.get(path="/test", response_model=Dict[str, int]) async def test():     return {"foo": 20}
  执行请求: curl http://127.0.0.1:8000/test {"foo":20}

怎么用U盘重装电脑重装系统1。下载U盘启动盘制作工具(老毛桃,大白菜,电脑诊所等),安装于电脑,插入U盘后运行该软件,将U盘制作成启动盘2。插入制作好启动后的U盘,重新将电脑开机3。进入BIOS设置将U盘设若想五年内不换手机,建议一步到位,目前只有这4款机型符合要求想问问大家都是多久换一次手机的,感觉身边人换手机的频率在逐步降低,一部手机用两到三年都是常态了,其实一部手机要想用的长久,关键就在选择部分,买对不买贵,适合自己的手机往往能用的更久俄罗斯宣布半导体计划,2030年实现28nm国产化,应对手机断供因为俄乌冲突原因,以苹果三星为首的科技巨头集体宣布断供俄罗斯市场,同时一些芯片代工厂也停止合作。为了解决半导体行业的困境,俄罗斯宣布最新半导体制造展望,计划最快在2030年实现28vivoXFoldOPPOFindN和荣耀MagicV,折叠屏幕手机怎么选择?折叠手机一律不推荐购买,实用性太差了。(当然土豪尝鲜就无所谓了)一是机身大小问题,展开之后就是一个小平板,而且重量上基本都是超过400g的,不适合使用。二是折叠屏幕的实用问题。即使奔驰EQXX概念车刷屏,续航超过1000KM就能解决如今的续航焦虑吗?进入新能源汽车快速发展的当下,纯电车型的续航里程依然是目前消费者购买此类车型首要考虑的因素之一。纯电汽车的续航里程也越来越长,从300400到如今主流的500600公里的续航里程,运营商的台词要变了,中国放缓5G投资虽然今年全球电信资本支出预计将增加3,部分原因是美国的无线投资和中国的非移动支出增加,但DellOro集团的分析师预测,资本支出增长将在2023年和2024年逐渐减弱。2021年,为什么在日本是实体店干掉电商,在中国却是电商干掉实体?其实日本这种现象并不光是日本,你会看到在发达国家大部分电商都干不过实体店。根源不是因为他们的实体经济多么发达多么了不起,而是因为他们的电商发展太慢了。电商发展需要两项最基本的基础设最低2899!最大续航400里,这3款电动车速度快还耐用,适合跑外卖提到外卖小哥,总会不自觉地将他们和电动车联系在一起,电动车是他们的双腿,一辆跑得远还耐用的电动车能减少他们不少麻烦。今天小编就来推荐3款适合外卖小哥跑外卖用的高性价比电动车。适合跑速度更快更稳,台电稳影A810SSD让你的效率翻倍随着网速的提升,越来越多的人使用起了网盘NAS,但两者都存在不稳定限速,甚至被关闭等情况,我们存储在上面的数据也就无法得到安全保障了,所以很多时候,我还是习惯使用移动存储介质进行定五一换手机首选这3款,12GB大内存,速度快价格香,还能再用5年其实现在的手机用个三五年的真不是什么问题,不管是安卓手机还是苹果手机,大家想用得长久其实运行内存是关键,运行内存的容量越大,其未来的体验也就会越好,所以以下这三款手机绝对是五一前换华为Matexs2将于4月28日发布,售价或突破20000元华为近日宣布,将于4月28日发布新发布会,发行第五款折叠旗舰MateXs2,华为终端BGCEO余承东表示,这款新折叠旗舰将超越消费者对折叠屏手机的想象。接下来由每天分享数码一线资讯
年中旗舰推荐,这几款你不考虑吗?时间上已经来到了今年的七月份,不少厂商也都已经发布了自己的旗舰机型,在外观和配置都各有千秋,给不少用户造成了选择困难。今天我们就推荐几款非常不错的旗舰手机,相信它们不管配置还是使用蔚来要建4千座换电站,覆盖东三省和新疆,魄力稳居第一!近段时间学区房房价大跌,指着房价搞快钱的人,应该都在天台站成了壮阔靓丽的风景线。学区房的热度降了,电区房的热度又上来了。作为新能源造车势力里,最有前景之一的蔚来汽车。在技术上,一直6月Android手机性价比榜Redmi真我正面交锋有没有发现,6月下旬几乎没有新机发布,对比前俩月的新机潮,这会儿偃旗息鼓,倒是略显冷清了。原因为何?小北认为,按照以往的新机发布规律来看,这个时间似乎是国产手机厂商的休整期,经历了整县模式最优解华为零碳整体解决方案近日,国家能源局在全国开展整县(市区)推进屋顶分布式光伏开发试点工作以来,截至目前已有多个省市跟进。迎万亿市场机遇,国家电投国家电网等央企率先反应,陆续与地方政府签订协议,抢占县域华为旗舰机型外观将迎来大改,全新概念设计曝光从以往华为发布的旗舰机型来看,华为顶级旗舰手机相较友商旗舰机型设计有着浓厚的商务风,不过随着屏下摄像头技术的大火,华为似乎也想改变目前的外观设计现状。从最新爆料消息来看,华为旗舰手小米MIXFLIP折叠屏手机专利图曝光!背面两种相机造型由于能带来更大屏的视觉体验,在全面屏手机即将完美时(屏下摄像头下半年爆发),折叠屏手机成为了新的屏幕方向,目前三星小米和华为等主流手机大厂,都已推出了相关的折叠屏手机。而说到折叠屏骁龙870才是真旗舰!看中性价比就选这三款,流畅用上两三年今年的骁龙888可以说是彻底翻车了,虽然是性能最强的处理器,但功耗表现实在拉胯,尤其是现在夏天的使用,很轻易就会降频,导致游戏体验不佳,而骁龙870作为次级芯片,反而因此受捧,不少BW2021火爆开启,华硕WiFi6多款二次元新品燃爆全场在2021年7月9日至11日,BilibiliWorld2021(以下简称BW2021)在上海国家会展中心盛大开启!作为B站大型线下嘉年华,集演出展览和互动游戏于一体,可以说是这个爆料圈地震?苹果三星均采取行动打击未发布产品的爆料援引知名爆料人士MaxJambor(又名MaxJmb,AllAboutSamsung网站编辑)透露,三星加强了版权打击力度,在社区和社交媒体上关于该公司未发布产品的图片和视频内容将2000价位手机推荐过年前我手机实在续航很拉胯,而且正在考驾照,每天还用手机刷快手做任务赚钱,魅族e3的续航已经坚持不到下午使用了,于是囊中羞涩的我忍无可忍,决定换手机了,市场调研一圈,发现红米k30为什么电视那么大才23千元,手机那么小要56千元?谢邀!虽然电视屏幕比手机大很多,但两者的科技含量完全不一样,价格自然也大不相同。首先,电视的体积虽然很大,但如果你有机会把电视拆开来,会发现它的主板其实也很小,可能还没有电脑的主板