fastapi有各种各样的参数,包括:
- url参数(定义在url中的参数)
- param参数(使用url后面?xx=xx)定义的参数
- body参数(在请求主体中携带的json参数)
- form参数(在请求主体中携带的web表单参数)
- cookie参数(在请求的cookie中携带的参数)
- file参数(客户端上传的文件)
1. url参数
url参数是一种应用非常广泛的参数,很多地方都会使用,甚至的博客系统(看看你这篇文章的url)可能同样应用了这种类型的参数(但有可能不是这种实现).
他的意思是,将信息放在url中,比如这样:
https://www.jianshu.com/u/91bc345f7c84
那么,我们就可以将后面的91bc345f7c84的部分定义为url参数,传递到函数中:
例:
from fastapi import FastAPI
app=FastAPI()
app.get("/echo/{text}") #注意这里text将是函数定义的参数名.
async def getEchoApi(text:str): #通过定义参数类型可以让fastapi进行默认的参数检查.
return {"echo":text}
将其用uvicorn放到localhost:8000上执行.(不会的可以参见这篇文章运行fastapi程序)
很简单的一段代码,将url中的内容原样返回.
比如说,当我们访问这个url:
localhost:8000/echo/HelloWorld
返回的内容将是:
{"echo":text}
2. param参数
这可能时最常见的一种参数了,比如说,当我们百度时,可以在地址栏上看到这样的地址:
https://www.baidu.com/s?ie=UTF-8&wd=fastapi参数汇总
其中,?后面的设定了参数ie为"UTF-8",参数wd为"fastapi"
这种参数的定义是所有参数中最简单的,直接在函数定义中定义参数即可:
from fastapi import FastAPI
app=FastAPI()
app.get("/echo2/") #注意这里url上没有定义参数
async def getEchoApi(text:str): #fastapi会聪明的发现它不是URL参数,然后自动将他识别为param参数.
return {"echo":text}
运行后:
localhost:8000/echo2?text=HelloWorld
返回{"echo":text}
3. body参数
这种参数主要常见于数据的提交等操作中,注意get操作是不支持携带请求主体的,可以使用诸如POST,PUT等请求方式.
对于这种参数的调试,我们可以使用POSTMAN进行.
from fastapi import FastAPI
from pydantic import BaseModel #fastapi的一个依赖,需要从pydantic中引入
app=FastAPI()
class EchoArgs(BaseModel): #继承BaseModel
text:str #定义一个字符串型参数
app.post("/echo/") #get不支持请求体,更换请求方法
async def postEchoApi(args:EchoArgs): #设置刚才定义的参数
return {"echo":item.text} #原样返回
返回同之前的一样
4. form参数
这种参数主要常见于HTML中的表单,对于表单浏览器有额外的另一套规则,所以我们在这里要定义其参数类型为表单参数.
from fastapi import FastAPI,Form #引入Form用于定义表单参数
app=FastAPI()
app.post("/echo/")
async def postEchoApi(text:str=Form(None)): #通过Form设置参数
return {"echo":text} #原样返回
效果同之前的一样
5. cookie参数
cookie参数,一般用于用户的标识,用户习惯的记录等.各大网站都在使用这种方式,后来的session和token也要用到cookie技术.cookie本质是一种在客户端保存的数据,每次请求都会携带,你也可以在响应中进行设置.
from fastapi import FastAPI,Cookie
app=FastAPI()
app.post("/echo/")
async def postEchoApi(text:str=Cookie(None)):
return {"echo":text} #原样返回
可以发现,和form参数的定义十分相似.
6. file参数
file参数用于接收客户端上传的文件,有两种方式,
from fastapi import FastAPI,File,UploadFile #引入文件相关操作
app=FastAPI()
app.post("/upload/2")
async def postUploadFile1Api(file:bytes=File(None)):
... #文件相关操作
app.post("/upload/1")
async def postUploadFile2Api(file:UploadFile=File(None)):
... #文件相关操作
其中,上传的文件,可以使用bytes或UploadFile两种格式,但我们推荐使用UploadFile方式,因为:
Using
UploadFile
has several advantages overbytes
:
- It uses a "spooled" file:
- A file stored in memory up to a maximum size limit, and after passing this limit it will be stored in disk.
- This means that it will work well for large files like images, videos, large binaries, etc. without consuming all the memory.
- You can get metadata from the uploaded file.
- It has a file-like
async
interface.
来自,fastapi官网.
大意:
- 它使用“假脱机”文件:
- 存储在内存中的文件大小上限为最大,超过此限制后,文件将存储在磁盘中。
- 这意味着它可以很好地用于大型文件,例如图像,视频,大型二进制文件等,而不会占用所有内存。
- 您可以从上传的文件中获取元数据。
- 它具有类似类似文件的接口。
所以推荐使用UploadFile
以上是这篇文章的全部,错误的地方恳请指正.
希望能和大家一起学习.
最后,都看到这了,赞赏一下呗!(^ ~ ^||).