FastAPI
中的Request
和Response
是用于处理HTTP请求和响应的两个核心对象。它们提供了许多功能和属性,使你能够更灵活地处理和构建HTTP请求和响应
Request
你可以在视图函数中声明一个变量,并指定类型为Request
,那么你就可以操作这个Request
对象了。如下:
from fastapi import Request
@app.get("/home")
async def home(request: Request):
print(type(request), request)
return {
'code': 1}
Request
具有如下属性:
app
: 程序入口对象,即FastAPI
对象url
: 获取当前完整的url,默认情况下返回一个starlette.datastructures.URL
对象。例如:http://localhost:8000/home?name=laozhang
base_url
: 获取请求的路径,默认情况下返回一个starlette.datastructures.URL
对象。例如:http://localhost:8000/
headers
: 获取请求的标头,默认情况下返回一个starlette.datastructures.Headers
对象query_params
: 获取查询参数,默认情况下返回一个starlette.datastructures.QueryParams
对象path_params
: 路径参数,默认情况下返回一个dict
类型cookies
: cookie信息,默认情况下返回一个dict
类型client
: 客户端信息,默认情况下返回一个starlette.datastructures.Address
类型。例如:Address(host='127.0.0.1', port=63902)
session
: session信息,默认情况下返回一个dict
类型。值得注意的是,在FastAPI
中,使用session需要使用到starlette-session
库,并且需要将SessionMiddleware
添加到中间件中,否则将会引发报错,使用如下:
from redis import Redis
from fastapi import FastAPI
from fastapi import Request
from starlette_session import SessionMiddleware
from starlette_session.backends import BackendType
app = FastAPI()
r = Redis.from_url("redis://:12345678@localhost:6379/1")
app.add_middleware(
SessionMiddleware,
secret_key="secret",
cookie_name="cookie22",
backend_type=BackendType.redis,
backend_client=r
)
@app.get("/home")
async def home(request: Request):
print(type(request.session), request.session)
return {