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

17。FastAPI表单数据

  17.FastAPI 表单数据
  如果接收的数据不是JSON格式,而是表单字段,则需要使用Form。在FastAPI中,要使用Form,需要事先安装python-multipart,执行如下命令: pip install python-multipart
  Form参数与Path、Query、Body一样,从fastapi导入。其使用方法相同。 17.1使用Form参数from fastapi import FastAPI from fastapi import Form  app = FastAPI()  @app.post(path="/login") async def login(uacc: str = Form(...), upwd: str = Form(...)):     res = False     if uacc == "admin" and upwd == "admin":         res = True     return {"res": res}
  执行请求: curl -d "uacc=admin&upwd=123" -X POST http://127.0.0.1:8000/login {"res":false} curl -d "uacc=admin&upwd=admin" -X POST http://127.0.0.1:8000/login {"res":true}
  在使用Form参数时,需要注意:可以在一个路由操作中声明多个 Form 参数,但不能同时声明要接收 JSON 的 Body 字段。因为此时请求体的编码是 application/x-www-form-urlencoded,不是 application/json;这不是 FastAPI 的问题,而是 HTTP 协议的规定。 17.2使用File参数
  在web开发中,文件上传的需求是肯定会出现的,FastAPI通过多种方式支持文件上传操作。首先可以使用与Form、Body等相同的File,File直接继承自Form类。代码如下: from fastapi import FastAPI from fastapi import File  app = FastAPI()  @app.post(path="/upload") async def login(file: bytes = File(...)):     with open("test.png", "wb") as f:         f.write(file)     return {"file_size": len(file)}
  执行请求: curl -F "file=@demo.png" -X POST http://127.0.0.1:8000/upload {"file_size":10731}
  通过查看项目所在文件夹,其下的test.png文件与demo.png文件相同。
  在FastAPI中,声明文件体必须使用 File,否则,FastAPI 会把该参数当作查询参数或请求体(JSON)参数;文件作为表单数据上传;如果路由操作函数参数的类型声明为 bytes,FastAPI 将以 bytes 形式读取和接收文件内容,这种方式把文件的所有内容都存储在内存里,适用于小文件。所以,在大多数情况下,我们会使用 UploadFile。 17.3UploadFile类型
  定义 File 参数时使用 UploadFile 类型,UploadFile 的属性如下: filename:上传文件的文件名字符串; content_type:内容类型(MIME 类型 / 媒体类型)字符串(str),如:image/jpeg; file: 文件,可直接传递给其他file对象的函数或支持库。
  UploadFile 支持以下 async 方法: write(data):把 data (str 或 bytes)写入文件; read(size):按指定数量的字节或字符(size (int))读取文件内容; seek(offset):移动至文件 offset (int)字节处的位置;例如,await myfile.seek(0) 移动到文件开头;执行 await myfile.read() 后,需再次读取已读取内容时,这种方法特别好用; close():关闭文件。
  因为上述方法都是 async 方法,要搭配 await 使用。
  代码如下: from fastapi import FastAPI from fastapi import File from fastapi import UploadFile  app = FastAPI()  @app.post(path="/upload") async def login(file: UploadFile = File(...)):     with open("test.png", "wb") as f:         f.write(await file.read())     return {"file_name": file.filename}
  执行请求: curl -F "file=@demo.png" -X POST http://127.0.0.1:8000/upload {"file_name":"demo.png"}
  通过查看项目所在文件夹,其下的test.png文件与demo.png文件相同。
  使用UploadFile与 bytes 相比,其优势: 使用 spooled 文件:存储在内存的文件超出最大上限时,FastAPI 会把文件存入磁盘; 这种方式更适于处理图像、视频、二进制文件等大型文件,好处是不会占用所有内存; 可获取上传文件的元数据; 自带 file-like async 接口; 暴露的 Python SpooledTemporaryFile 对象,可直接传递给其他预期「file-like」对象的库。 17.4多文件上传
  FastAPI支持同时上传多个文件,可以使用一个表单字段上传多个文件,此时,路由操作函数要声明为包含bytes或UploadFile的列表。代码如下: from fastapi import FastAPI from fastapi import File from fastapi import UploadFile from typing import List  app = FastAPI()  @app.post(path="/upload") async def upload(files: List[bytes] = File(...)):     sizes = [len(file) for file in files]     index = 0     for file in files:         with open("{0}.png".format(index), "wb") as f:             f.write(file)             index += 1     return sizes  @app.post(path="/upload_file") async def upload_file(files: List[UploadFile] = File(...)):     names = [file.filename for file in files]     for file in files:         with open(file.filename, "wb") as f:             f.write(await file.read())     return names17.5同时请求表单与文件
  在FastAPI中,支持同时使用表单和文件。但可以在一个路径操作中声明 File 和 Form 参数,但不能同时声明要接收 JSON 的 Body 字段。因为此时请求体的编码是 multipart/form-data,不是 application/json。 from fastapi import FastAPI from fastapi import Form from fastapi import File from fastapi import UploadFile from typing import List  app = FastAPI()  @app.post(path="/upload") async def upload(files: List[bytes] = File(...), desc: str = Form(...)):     print(desc)     sizes = [len(file) for file in files]     index = 0     for file in files:         with open("{0}.png".format(index), "wb") as f:             f.write(file)             index += 1     return sizes   @app.post(path="/upload_file") async def upload_file(files: List[UploadFile] = File(...), desc: str = Form(...)):     print(desc)     names = [file.filename for file in files]     for file in files:         with open(file.filename, "wb") as f:             f.write(await file.read())     return names
  执行请求: curl -F "desc=images" -F "files=@demo.png" -F "files=@elephant.png" -X POST http://127.0.0.1:8000/upload [10731,50279] curl -F "desc=images" -F "files=@demo.png" -F "files=@elephant.png" -X POST http://127.0.0.1:8000/upload_file ["demo.png","elephant.png"]
  后台print输出: images INFO:     127.0.0.1:52608 - "POST /upload HTTP/1.1" 200 OK images INFO:     127.0.0.1:52611 - "POST /upload_file HTTP/1.1" 200 OK

混动省钱?丰田双擎车主算了一笔账,终于知道怎么买更划算在2020年发布的节能与新能源汽车技术路线图2。0中明确提出到2035年传统燃油车将100的被混动车型所替代,所以留给传统燃油车的时间也就剩下十几年的时间了,而在这十几年的时间里,国产什么时候能超合资?从李书福下令砸车就已经做到了1956年,第一款国产汽车正式下线,国内汽车工业实现了从01的跨越,而彼时的海外汽车工业早已经发展了几十年,甚至上百年。国内汽车工业起步晚,也导致了最开始国产车和海外品牌推出的车型资讯降低小微商户个体户融资成本中信银行携中国银联发行乡村振兴借记卡日前,中信银行联合中国银联推出乡村振兴借记卡,助力小微商户及个体工商户个人客户降低融资成本提升财富增值,全面支持乡村振兴。中信银行介绍,乡村振兴卡是一款面向普惠金融客户个人经营贷客港股收评恒指高开高走绿电板块强势上涨财联社(上海,编辑阿荣)讯,港股周四高开高走,截止收盘,恒生指数涨0。45,报收25225。19国企指数涨1。09,报收8953。12红筹指数跌0。32,报收3757。86恒生科技猪价强势反弹猪股全线飘红昙花一现还是周期反转?财联社(郑州,记者王平安张晨静)讯,今年4月以来,一路下滑的猪价终于迎来触底反弹,且反弹幅度已经超过50,这次猪价究竟是反弹还是反转?上海钢联农产品事业部生猪分析师郭刚表示,10月吃Blackmore神户牛近江牛三种顶级和牛是什么体验?在澳洲说起顶级Waygu,无人不知Blackmore,而在日本想吃顶级和牛,就一定会选神户牛近江牛。虽然澳洲(M9)和日本(A5)和牛的等级说法不同,但是两个国家对顶级和牛品质的追自嘲无性婚姻吴彦祖正成为华人精神领袖!帅是他最不值的优点什么才叫顶级的帅?是男女老少通吃的颜值和身材吗?47岁的吴彦祖给了我们不一样的答案当颜值巅峰远去,多年来被颜霸光芒掩盖下的超正人品,更值得被追捧!最近,阿祖又在国内外上了不少热搜。旧款停产?无边框的iMac马上来昨日,有媒体报道苹果官网上的iMacPro购买页面出现了数量有限,售完即止的标识,莫非这款2017年发布的苹果产品已经完成了它的使命?今日外媒MacRumor向苹果官方确认,当库存亚市资讯播报美联储Taper预期落地亚洲股市集体上涨财联社(上海编辑刘蕊)讯,本周四,亚洲股市多数上涨,截至发稿MSCI亚太指数(除日本外)涨0。22,十年期美债收益率日内涨1个基点至1。589,美股三大主要股指期货均小幅上涨,其中焦点复盘个股迎来报复性反弹关注量能是否有效放大财联社11月4日讯,今日共97股涨停,16股封板未遂,封板率为86吉鑫科技5连板,华亚智能4连板,香山股份3连板,创业板佳创视讯2连板。盘面上,收涨个股3311只,收跌个股1053高油价难以负担!排灯节前夕印度宣布下调燃油税财联社(上海,编辑潇湘)讯,随着全球原油价格飙升将印度国内的燃料价格推至创纪录高位,印度民众正愈发难以负担得起高昂的油价,印度政府周三(11月3日)终于宣布将下调该国汽油和柴油的消
碳捕捉关键技术或突破!比尔盖茨注资这家公司智通财经APP获悉,总部位于马萨诸塞州的一家碳捕捉初创公司VerdoxInc。已从投资者那里筹集了8000万美元,其中包括比尔盖茨旗下BreakthroughEnergyVentu越南造车新势力VinFast计划在美以西海岸为中心开设展厅日经中文网1月30日消息,越南最大综合性企业温纳集团(Vingroup)已开始在欧美市场获得纯电动汽车(EV)订单。温纳集团旗下开展汽车制造和销售业务的VinFast的全球首席执行年轻时的刘强东,穿着打扮令人心酸,网友感叹这才是白手起家引言说起京东这个名字,想必大家都已经十分熟悉了吧。现如今京东的发展势头也是很猛的,虽然始终被淘宝力压一头,但与此同时,京东也有很多独特的优势。比如说产品质量更有保障发货速度更加快捷中国公司在美国上市受阻可能会使投资者重新考虑投资科技公司北京随着对希望在美国上市的内地公司实施新规定,投资者可能不得不三思,是否要押注中国科技初创企业如果在香港上市成为唯一可行的选择,基金经理可能需要重新思考他们的投资策略,因为与纽约证斩获多项第一!TCL电视深受消费者青睐千禧年之后,技术的高效迭代与风口的接连涌现让各大行业迎来巨变,各种各样的科技品牌强势崛起,而在家电领域,TCL旗下的彩电产品可谓是家喻户晓,深得消费者信任,而其中的原因也很简单,强C模板编程自定义创建vector及创建容器includetpftypeutil。hincludetfttypelib。hautostreamtpfstream()streamautonlstream。getconsoleo新年涨新知!基于注解的Spring容器配置写在前面Spring容器支持3种方式进行bean定义信息的配置,现在具体说明下XMLbean的定义和依赖都在xml文件中配置,比较繁杂。Annotationbased通过直接的方式微塑料小科普表面活性吸附能力远超海绵平均寿命可达500年中国小康网讯近年来,科学家们已经在全球数千个地点追踪到微塑料。新研究标志着研究方向开始转向微塑料循环,即微塑料的运动路径积聚地点以及途中的转变形式。众所周知,微塑料的最大危害,在于发烧日记2022年前回老家,从床底下找出一台早年淘的很重的胆石功放。零七年在上海旧货市场淘的。配上老弟结婚时的两个大av音箱,接上后只有一个声道是响的。拆开后换了两个8A的保险丝后,两个声道都响了从手机演化看春节改变移动梦网到5G时代科技改变春节笔者是90后,正好赶上了互联网浪潮的崛起。本文接下来将主要从手机的演化切入,来观察春节的改变。2014年开始用上大屏智能手机(很明显,人生的第一部智能手机不是买不起的苹为啥是三星而不是华为,或者其它国产手机?距离北京冬奥会开幕(2022年2月4日)还有两天时间。各国的参赛运动员也是陆续地赶到了北京冬奥奥运村,运动员在感受了北京冬奥奥运村的高科技床垫带来惊喜的同时,他们也顺理成章地成为了