Request

Request#

参考:Request

假设你想在你的路径操作函数中获取客户端的 IP 地址/主机。

为此,你需要直接访问请求对象。

!pip install -q fastapi uvicorn
from fastapi import FastAPI
from starlette.requests import Request

app = FastAPI()


@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
    client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}

通过声明路径操作函数参数,并将其类型设置为 Request,FastAPI 就会知道将 Request 传递给那个参数。

if __name__ == "__main__":
    import asyncio
    import uvicorn
    config = uvicorn.Config(app, port=3001, reload=False,)
    server = uvicorn.Server(config)
    loop = asyncio.get_event_loop()
    loop.create_task(server.serve())