热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

其它请求数据处理

一、CookieCookie的定义与声明与Query和Path类似:fromtypingimportOptionalfromfastapiimportCookie,FastAPIa

一、COOKIE

COOKIE的定义与声明与Query和Path类似:

from typing import Optional
from fastapi import COOKIE, FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(ads_id: Optional[str] = COOKIE(None)):
return {"ads_id": ads_id}

此处需要使用COOKIE来进行声明,否则将会被解析为查询参数。那么这样应该如何进行测试呢?此处可以使用postman进行测试:

注意在Headers中key是COOKIE,否则将会被解析为Header参数。


二、Header

 Header与之前的COOKIE使用一样:

from typing import Optional, List
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Optional[str] = Header(None, convert_underscores=True), x_token: List[str] = Header(None)):
return {"User-Agent": user_agent, "x_token": x_token}

需要使用Header来进行声明,否则就会将其作为查询参数。



  • convert_underscores 是为了解决有些HTTP代理和服务器是不允许在请求头中带有下划线的,所以Header提供convert_underscores属性让设置,默认是True,也就是FastAPI会自动转换

  • x_token 请求头参数可以接受多个值,以列表的形式接收,其表现形式如下。


三、表单数据

   上述接受的请求数据是json类型的,当需要接受并且处理表单数据时使用Form,不过在使用时注意是否已经安装python-multipart第三方包,如果没有安装,可以通过pip安装:

pip install python-multipart

  比如,在登录时提交用户名和密码的表单数据到后台进行验证,FastAPI对于表单Form的使用与Body/Query/Path/COOKIE相同。

from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}

这样在api中使用时显然media-type与之前application/json不同:


四、文件上传

在进行文件上传之前,需要确定是否已经安装python-multipart第三方包,如果没有安装,可以通过pip安装:

pip install python-multipart

因为上传的文件是以“form data”的形式向后台发送的。


1、小文件上传



  • 单个文件上传

from fastapi import FastAPI, File
app = FastAPI()
@app.post("/file/")
async def create_file(file: bytes = File(...)):return {"file_size": len(file)}

  通过File来进行声明,这样file参数就不会被当作查询参数或者请求体参数。在路径操作函数中声明bytes类型,这样接收的就是bytes类型,并且写入到内存,所以适合于小文件上传。



  • 多个文件上传

多个文件上传就是bytes类型定义为List[bytes]即可:

from typing import List
from fastapi import FastAPI, File
app = FastAPI()
@app.post("/multi/file/")
async def create_multi_file(file: List[bytes] = File(...)):
return {"file_size": len(file)}

如图所示:


 2、大文件上传



  • 单个文件上传

from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/uploaadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}

使用UploadFile的优势:

(1)文件存储在内存中,使用的内存达到阈值后,将被保存在磁盘中

(2)适合于图片、视频大文件

(3)可以获取上传的文件的元数据,如文件名,创建时间等

(4)有文件对象的异步接口上传的文件是Python文件对象,可以使用write(), read(), seek(), close()操作



  • 多个文件上传

from typing import List
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/multi/uploaadfile/")
async def create_multi_upload_file(files: List[UploadFile] = File(...)):
results = []
for file in files:
cOntent= await file.read()
print(content)
results.append({"filename": file.filename, "content_type": file.content_type})
return results

上面读取每个文件的内容,通过异步的方式完成。调用接口如下:

 



推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
author-avatar
1614221827wwz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有