FastAPI中Depends()无参数传入的作用原理疑问
FastAPI中Depends()无参数传入的作用原理疑问
嘿,这个问题问得特别好,我刚上手FastAPI的时候也被这个简化写法搞懵过!
你之前的认知其实没错——Depends()的核心就是指定一个要提前执行的依赖项(可以是函数、类这类可调用对象),但FastAPI给我们提供了一个非常贴心的语法糖:当你给依赖变量加上了明确的类型提示,且这个类型本身就是可调用的依赖项时,Depends()里可以直接省略参数。
具体到你的代码里:
form_data:OAuth2PasswordRequestForm = Depends()
这行代码完全等价于:
form_data:OAuth2PasswordRequestForm = Depends(OAuth2PasswordRequestForm)
为什么OAuth2PasswordRequestForm能当依赖项呢?因为它是FastAPI内置的一个专门处理OAuth2密码模式表单的类,它的构造函数(__init__方法)是可调用的。当FastAPI处理这个依赖时,会自动调用这个类的构造函数,从请求里提取对应的表单数据(比如username、password这些字段),然后把实例化后的对象赋值给form_data变量,供你的接口函数使用。
简单来说,FastAPI会自动把类型提示里的OAuth2PasswordRequestForm当作Depends()的参数,帮你省去了重复写的麻烦。你可以自己动手测试一下,把Depends()改成Depends(OAuth2PasswordRequestForm),接口的运行效果完全一致,这样就能直观理解这个语法糖的作用啦。
备注:内容来源于stack exchange,提问作者pablowilks2
相关产品推荐
相关产品推荐

