FastAPI中Swagger UI自动出现必填local_kw字段的移除问题
问题原因
你在接口中直接使用Depends(SessionLocal)时,SessionLocal是SQLAlchemy的sessionmaker生成的实例,它的__call__方法内置了local_kw参数。FastAPI会自动解析依赖对象的参数,因此这个local_kw被识别为必填字段,出现在了Swagger UI的表单中。
解决方法
把数据库会话的获取逻辑包装成一个无额外参数的依赖函数,替代直接传入sessionmaker实例:
- 新增数据库会话依赖函数:
def get_db(): db = SessionLocal() try: yield db finally: db.close()
- 修改接口中的依赖声明:
@router.post("/token", response_model=dict) async def login_for_access_token( login_data: LoginRequestBody, session: Session = Depends(get_db) # 替换原有的Depends(SessionLocal) ): # 原有业务逻辑保持不变
这样修改后,FastAPI只会解析get_db函数的参数(该函数无额外入参),Swagger UI中的local_kw必填字段就会消失。
内容的提问来源于stack exchange,提问作者Avin Mathew
相关产品推荐
相关产品推荐

