这是我定义的一个依赖方法:async def ip_limiter(hits, time, request: Request): print(hits, time) try: host = request.headers["x-real-ip"] except: host = request.client.host data = {"hit": "10", "hits": "50", "ex": "2023-04-15 10:01:18.331799", "ip": host} await request.app.state.cache.hmset('/init', data) values = await request.app.state.cache.hgetall('/init1111') print(values) return True 现在我想在添加依赖时传前两个参数,request参数不传,该怎么写
时间: 2024-03-18 20:42:06 浏览: 64
可以将前两个参数 `hits` 和 `time`定义为依赖项函数的参数,然后在路径操作函数中使用这个依赖项函数,并将 `request` 参数设置为默认值 `None`,示例如下:
```python
from fastapi import Depends, FastAPI, Request
app = FastAPI()
async def ip_limiter(hits: int, time: str, request: Request = None):
print(hits, time)
if request:
try:
host = request.headers["x-real-ip"]
except:
host = request.client.host
data = {"hit": "10", "hits": "50", "ex": "2023-04-15 10:01:18.331799", "ip": host}
await request.app.state.cache.hmset('/init', data)
values = await request.app.state.cache.hgetall('/init1111')
print(values)
return True
@app.get("/")
async def root(limiter: bool = Depends(ip_limiter(hits=10, time="2022-05-01"))):
return {"message": "Hello World"}
```
在上面的代码中,我们将 `hits` 和 `time` 参数定义为依赖项函数 `ip_limiter()` 的参数,并将 `request` 参数设置为默认值 `None`。在路径操作函数 `root()` 中,我们使用 `Depends()` 函数来获取依赖项函数 `ip_limiter()`,并传递 `hits` 和 `time` 参数作为参数。由于我们将 `request` 参数设置为默认值 `None`,因此在依赖项函数中我们需要进行判断,如果 `request` 不为 `None`,则执行相应的操作。
当我们访问根路径时,`ip_limiter()` 将会被调用,并传递 `hits=10` 和 `time="2022-05-01"` 作为参数。如果需要访问 `request` 参数,可以通过在路径操作函数中使用 `Request` 类型的参数来访问。
阅读全文