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

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}

oppo才是真大哥?新专利跳过屏下镜头阶段,恐怕又要惹跟风了作为国产四大手机厂商之一,OPPO这些年在发明专利上,可谓是下足了功夫,在国家知识产权局公布的2020年上半年国内发明专利授权量中,OPPO以1925件排在了全国第二,发明专利授权从销售到百亿女富豪,董明珠为何会被家谱除名?薇娅我也经历过提起国内的女企业家,大家的第一反应就是董明珠。董明珠雷厉风行的行事风格,被网友们称为铁娘子。董明珠的能力是有目共睹的,刚进入格力时还只是个跑业务的销售,凭借自己的努力一步一步往上爬碎屏克星小米11!200斤重压未破极限,钢化膜都省了手机作为我们时时刻刻带在身上的实用神器,总是让人忍不住把它落下,以至于跟它相处的时间远比恋人来得多,真真切切地演绎了什么叫捧在手心呵护的心肝宝贝。为了给它提供更好的保护,我们都额外学习暴雪!雷军10年前的喊话,隐藏了MIUI比肩iOS的秘诀12月28日晚的发布会,亮点实在是太多,除了焊死车门的3999,把选择权交还给用户的真环保,还有体验飞跃提升的MIUI12。5版本。这次的MIUI12。5,对SystemUI进行了小米11真机上手,深度解析选择它的3个理由千盼万盼,总算是盼来了小米11,作为一款开年的旗舰机,小米11到底有着怎么样的优势和竞争力呢?一起来看看。首先是性能,搭载全球首发骁龙888处理器,可以说是安卓机的性能天花板,更不iQOO7销量堪忧?发布会全程被腿吸引,卢伟冰表现实属狡猾作为2021年手新机的先锋队,iQOO7的发布,期待值实在是高。近年来,iQOO品牌在手机市场上,可谓是出尽风头。在诞生至今不到两年,就已经迅速成长为家喻户晓的手机品牌,其极致强悍小米有品汽车保养专家,3。9米自由伸缩,30分钟打五个作为一家专注于智能硬件智能家居以及软件开发的企业,小米自创立以来就给大家带来了很多高性价比的科技产品。从最早的三驾马车(MIUI手机米聊)起步,小米逐步做大做强,形成了自有的生态链火极一时的九宫格解锁,被唾弃毫无用处,但黑客却根本破解不了在智能手机发展至今,人们对它的依赖已经是越来越大了,不管是生活还是工作,手机都是非常好的一个工具,同时这也意味着手机的安全性越来越重要,所以厂商们在对于手机解锁也设置了相当多的内容负债48亿,债主上门随地大小便,员工卖房帮他还钱,如今是首富每个成功的企业家,背后都会历经为人不知的酸楚,才会有后面的成功。马云创业失败4次,账上曾仅剩200元马化腾假扮姑娘陪聊,想卖QQ没人要任正非有半年时间都是噩梦,半夜常常哭醒张一鸣1厚不过三个硬币的手机潮流,被性能一举打破,造就了小米11自从摩托罗拉发明第一台手机开始,为了有更好的握持手感与便携性,手机的尺寸都是在不断的缩小。在智能机兴起的前几年,全球最薄的手机机身厚度才只有4。75mm,差不多两个半硬币的厚度,但市场一跌,你就知道资产配置的重要性了!大家好,我是老李。今天我们来聊聊资产配置。这几天市场跌得又开始怀疑人生了!很多人都知道不要把鸡蛋放在一个篮子里,但是很多人不知道,放了很多鸡蛋的篮子它们没准在一辆车上!因此在市场大
外呼系统哪家公司做得好,电销外呼防封号软件外呼系统哪家公司做得好,电销外呼防封号软件在这个电销盛行的时代,科技发展速度无法预估,外呼系统的应用价值也逐级体现,所以当然有比较好用的电话外呼系统,下面就为你们介绍一下智创良品家axb电销系统容易封号?电销axb软件下载电销axb系统搭建代码技术是一方面,最重要是有外呼线路。解决了线路问题,代码程序如果是自己有能力开发的,可以自己写。如果没这方面的技术人才,也可以购买他人的源码,根据自己的要求定制网络电话呼叫软件免费版,外呼app网络电话呼叫软件免费版,外呼app免费客户呼叫中心管理软件是一款易用实用的电话营销,电话销售,电话录音,客户微信管理软件,是智创良品公司针对大量电销人员封号问题推出来的,电销来电规宋PLUS新能源售14。68万元起欢迎试驾驭见皆引领!全球首款宽体超混SUV领航上市!宋PLUSDMi上市价14。68万起(综合补贴后)创新采用骁云插混专用1。5L高效发动机高效EHS电混系统,达到短途用电经济节省,长途用宋PLUS新能源售14。68万元起欢迎试驾驭见皆引领!全球首款宽体超混SUV领航上市!宋PLUSDMi上市价14。68万起(综合补贴后)创新采用骁云插混专用1。5L高效发动机高效EHS电混系统,达到短途用电经济节省,长途用海豚售价9。38万元起欢迎莅临赏鉴纯电新物种海豚正式上市!综合补贴后售价9。38万元12。18万元!海豚是海洋车系的首款车型,也是首款采用海洋美学设计理念的车型,首款基于e平台3。0打造的车型。搭载DiLink3。宋PLUSDMiAWD正式上市,售19。98万元驭见皆引领!全球首款宽体超混SUV领航上市!宋PLUSDMi上市价14。68万起(综合补贴后)创新采用骁云插混专用1。5L高效发动机高效EHS电混系统,达到短途用电经济节省,长途用锐明技术国内车载视频监控龙头,智慧交通趋势下增长形势明朗选股理由次新股营收与净利润增长证券代码002970评级A本文分为六部分一主营业务二公司治理三财务分析四核心竞争力及投资逻辑五盈利预测及估值六投资观点数据截止日期2020年3月31日短视频的本质是用户赋能平台2016年以来,短视频进入爆发期,字节跳动和快手得益于短视频红利而迅速壮大。近来,腾讯系秒拍和微博又加大在短视频领域的布局,一时之间,短视频市场战端又起,至于谁能笑到最后,仁者见仁短视频如何变现?移动互联时代的到来,释放了巨大的用户红利,数以亿计的用户成为移动互联用户,在此基础上短视频市场爆发式增长,尤其值得一提的是,经过一段时间的探索实践,短视频的商业变现模式基本成熟,具短视频能否使优秀传统文化更美好?十九大报告指出,中国特色社会主义进入新时代,我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾。而借助互联网新渠道新形式来实现传统优秀文化的创造性转