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"
}
}









