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

Flask请求头校验装饰器requires_header如何添加正确的类型提示?

类型提示添加方案

你可以通过Python标准库的泛型标注工具来补全装饰器的类型提示,保证被装饰后的函数签名、返回值类型和原函数完全一致,符合类型检查规范。

第一步:新增导入

Python 3.10+ 版本直接从typing导入:

from typing import Callable, ParamSpec, TypeVar

如果使用Python 3.9及更低版本,先安装typing_extensions包,再从typing_extensions导入ParamSpec即可。

第二步:标注装饰器

# 定义泛型参数:P捕获原函数的参数类型,R捕获原函数的返回值类型
P = ParamSpec("P")
R = TypeVar("R")

def requires_header(func: Callable[P, R]) -> Callable[P, R]:
    @functools.wraps(func)
    def check_headers(*args: P.args, **kwargs: P.kwargs) -> R:
        if not flask.request.headers.get("X-Foo"):
            flask.abort(HTTPStatus.NOT_FOUND)

        return func(*args, **kwargs)

    return check_headers

说明

这种标注方式会完整保留原函数的类型信息,mypy、pyright等类型检查工具可以正确识别被@requires_header装饰的路由函数的参数和返回值类型,不会出现类型丢失、类型报错的问题,也完全兼容你代码里路由函数标注的ResponseReturnType返回类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:39:03