9.FastAPI Request对象

在实际开发过程中,有些时候我们需要通过Request对象直接获取一些信息,如:我们希望获取客户端的IP等信息,此时我们在路由操作函数中直接定义类型为Request的对象参数,就可以在代码中使用Request对象进行数据的获取。

假设在路由函数中定义了request:Request,那么该对象可以获取到哪些信息呢?

操作

说明

request.client.host

客户端连接的 host

request.client.port

客户端连接的端口号

request.method

请求方法

request.base_url

请求路径

request.headers

headers

request.cookies

cookies

request.url

请求url

request.url.components

url组成

request.url.scheme

请求协议

request.url.hostname

请求host

request.url.port

请求端口

request.url.path

请求path

request.url.query

请求查询参数

request.path_params

请求路径参数

request.query_params

请求查询参数

request.form()

表单数据

request.json()

JSON数据

request.body()

Body数据,返回值类型是 bytes

代码示例:

from fastapi import FastAPI
from fastapi import Request
app = FastAPI()
@app.get(path='/test/{a}')
async def test(request: Request):
res = {
# 客户端连接的 host
"host": request.client.host,
# 客户端连接的端口号
"port": request.client.port,
# 请求方法
"method": request.method,
# 请求路径
"base_url": request.base_url,
# request headers
"headers": request.headers,
# request cookies
"cookies": request.cookies,
# 请求 url
"url": request.url,
# 请求组成
"components": request.url.components,
# 请求协议
"scheme": request.url.scheme,
# 请求 host
"hostname": request.url.hostname,
# 请求端口
"url_port": request.url.port,
# 请求 path
"path": request.url.path,
# 请求查询参数
"query": request.url.query,
# 获取路径参数
"path_params": request.path_params,
# 获取查询参数
"query_params": request.query_params
}
return res

执行请求:

curl http://127.0.0.1:8000/test/1?q=query
{
"host":"127.0.0.1",
"port":58982,
"method":"GET",
"base_url":{
"_url":"http://127.0.0.1:8000/"
},
"headers":{
"host":"127.0.0.1:8000",
"user-agent":"curl/7.55.1",
"accept":"*/*"
},
"cookies":{},
"url":{
"_url":"http://127.0.0.1:8000/test/1?q=query",
"_components":[
"http","127.0.0.1:8000","/test/1","q=query",""
]
},
"components":["http","127.0.0.1:8000","/test/1","q=query",""],
"scheme":"http",
"hostname":"127.0.0.1",
"url_port":8000,
"path":"/test/1",
"query":"q=query",
"path_params":{
"a":"1"
},
"query_params":{
"q":"query"
}
}