You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Flask响应支持Pydantic后,如何解决Pylance返回类型提示错误?

解决Flask路由返回Pydantic BaseModel的Pylance类型提示错误

问题根源

Flask官方的路由返回类型注解仅包含Response、字符串、元组等常规类型,未纳入Pydantic的BaseModel。Pylance会严格校验返回值类型与注解是否匹配,因此即便你已经通过重写make_response实现了模型到响应的转换,仍会触发类型提示错误。

两种可行解决方案

方案一:子类化Flask并扩展路由类型注解

直接自定义Flask子类,修改route方法的类型注解,将BaseModel纳入合法返回类型范围,同时保留已实现的make_response转换逻辑。

完整代码示例:

from flask import Flask as BaseFlask, Response
from pydantic import BaseModel
from typing import Callable, TypeVar, Union, Any

# 定义绑定BaseModel的类型变量
T = TypeVar('T', bound=BaseModel)

class Flask(BaseFlask):
    def make_response(self, rv: Any) -> Response:
        # 你已实现的模型转响应逻辑
        if isinstance(rv, BaseModel):
            return Response(
                rv.model_dump_json(),
                mimetype="application/json"
            )
        return super().make_response(rv)
    
    # 重写route方法的类型注解,允许返回BaseModel
    def route(
        self,
        rule: str,
        **options: Any
    ) -> Callable[[Callable[..., Union[Response, T, Any]]], Callable[..., Union[Response, T, Any]]]:
        return super().route(rule, **options)

使用示例:

app = Flask(__name__)

class User(BaseModel):
    id: int
    name: str

@app.route("/user")
def get_user() -> User:
    return User(id=1, name="Alice")

方案二:使用类型存根文件覆盖Flask类型

若不想修改主代码结构,可通过创建类型存根文件(.pyi)扩展Flask的路由类型注解。

  1. 在项目根目录创建flask.pyi文件,内容如下:
from flask import Flask as _Flask
from pydantic import BaseModel
from typing import Callable, TypeVar, Union, Any, Response

T = TypeVar('T', bound=BaseModel)

class Flask(_Flask):
    def route(
        self,
        rule: str,
        **options: Any
    ) -> Callable[[Callable[..., Union[Response, T, Any]]], Callable[..., Union[Response, T, Any]]]:
        ...
  1. 若Pylance未自动识别该存根文件,可在项目根目录创建pyrightconfig.json,指定存根路径:
{
    "stubPath": "."
}

注意事项

  • 确保Pylance的类型检查模式未过度严格(如strict=true时需确认类型覆盖完全);
  • 若使用Pydantic v1版本,将model_dump_json()替换为json()即可。

内容的提问来源于stack exchange,提问作者fffrost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:30:18