外观
Header请求头参数
FastAPI使用Header类可以获取到Header参数。首先导入Header类,代码如下:
from fastapi import FastAPI
app = FastAPI()
@app.get('/items/')
async def read_items(*, user_agent:str = Header(None))
return {'User-Agent': user_agent}Header是Path、Query、Cookie的姐妹类,它同样继承自相同的Param类。
声明cookie时需要使用Cookie方法,否则参数会被解释为查询参数。
Header除了提供Path、Query和Cookie之外,还具有一些额外的功能。大多数标准标头都由“连字符”分隔。但是像user-agent这样的变量在Python中是无效的。因此,默认情况下,标头将参数名称字符从下画线转换为连字符以提取并记录标题。
另外,HTTP标头不区分大小写,因此,可以使用Python标准样式(snake_case)声明它们。因此可以像通常在Python代码中那样使用user_agent,而无需将首字符大写。
若出于某种原因需要禁用下画线到连字符的转化,请将Header参数convert_underscores设置为False。需要注意,需要提前记住一些HTTP代理和服务器禁止使用下画线的标头。
Form表单数据
当需要接收的字段为表单而不是JSON时,可以使用Form类。使用Form类需要先安装python-multipart,可以使用pip安装。安装命令如下:
pip install python-multipart首先,从FastAPI导入Form,代码如下:
from fastapi import FastAPI, Form接下来创建Form参数,和之前创建Body和Query参数的方法一样,代码如下:
from fastapi import FastAPI, Form
app = FastAPI()
@app.post('/login/')
async def login(*,
username: str=Form(...),
password: str=Form(...)
):
return {'username': username, 'password': password}例如,以一种可以使用OAuth2规范的方式(成为“密码流”)发送“用户名”和“密码”作为表的字段。规范要求这些字段必须准确命名为“用户名”和“密码”,并作为表单字段而不是JSON发送。
使用Form可以声明与Body相同的元数据,验证以及Query、Path和Cookie。
Form是一个类,直接继承自Body。要声明表单主体时,需要明确地使用Form。因为没有它,参数会被解释为查询参数或主体JSON参数。
HTML表单将数据发送至服务器时,通常会对数据添加“特殊”编码,这与JSON不同。FastAPi将确保从正确的位置(而不是JSON)读取数据。
表单的数据通常使用“媒体类型”application/x-www-form-urlencoded进行编码。当表单包含文件时,将被编码为multipart/form-data形式。