为什么Python Flask装饰器未记录?

日本

我有一个简单的Flask应用,我想用这样的装饰器来验证json格式的请求:

def validate_request(*expected_args):
    """
    Validate requests decorator
    """
    # print('=======================ENTER VALIDATE_REQUEST================')
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            json_obj = request.get_json()
            for expected_arg in expected_args:
                if expected_arg not in json_obj or json_obj.get(expected_arg) is None:
                    return api_response({'error': f"You must call with all request params: {', '.join(expected_args)}"})
            return func(*args, **kwargs)
        return wrapper
    return decorator

在路由端这样:

@user_api.route('/login', methods=['POST'])
@validate_request('email', 'password')
def login():
    req_data = request.get_json()
......................

我的问题是,当我调用“ / login”路由时,为什么不显示装饰器的PRINT语句?

仅当我启动服务器(烧瓶运行)时才记录该消息。

谢谢。

马克·迈耶

Python装饰器替换了他们正在装饰的功能。当解释器读取代码时,此替换发生在程序的开始处。这是将执行您的打印语句的时间。在这段时间之后,返回的函数是唯一将运行的代码。如果要在每次调用时运行打印,则需要放入将要调用的实际函数:

def validate_request(*expected_args):
    """
    Validate requests decorator
    """
    # print('=======================Function Decoration Happening================')
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print("==== ENTER VALIDATE_REQUEST ===")
            json_obj = request.get_json()
            for expected_arg in expected_args:
                if expected_arg not in json_obj or json_obj.get(expected_arg) is None:
                    return api_response({'error': f"You must call with all request params: {', '.join(expected_args)}"})
            return func(*args, **kwargs)
        return wrapper
    return decorator

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带Flask的Python装饰器

来自分类Dev

带Flask的Python装饰器

来自分类Dev

了解python装饰器。为什么这不起作用?

来自分类Dev

为什么这个 python 装饰器不起作用?

来自分类Dev

为什么python装饰器结果是这样的..?

来自分类Dev

为什么函数c()接受未记录的参数?

来自分类Dev

为什么要调用python装饰函数?

来自分类Dev

Python未记录到stdout

来自分类Dev

为什么我不能更改python记录器的级别?

来自分类Dev

如何为未记录的.py模块标识Python解释器版本?

来自分类Dev

如何为未记录的.py模块标识Python解释器版本?

来自分类Dev

为什么Angular 2使用装饰器?

来自分类Dev

装饰器为什么有用?

来自分类Dev

为什么要使用装饰器模式?

来自分类Dev

为什么Python的装饰器语法比普通包装器语法提供更快的记忆代码?

来自分类Dev

什么是PHP 5.5中未记录的SessionIdInterface?

来自分类Dev

为什么我的Javascript将未记录的值记录到CodeCademy控制台?

来自分类Dev

Python的解释器在“ a ++ 1”中打印什么内容,为什么?

来自分类Dev

Python部署未记录任何内容

来自分类Dev

用python装饰装饰器

来自分类Dev

为什么我的对象的属性未记录到控制台?

来自分类Dev

为什么有关已删除队列的信息未记录在 RabbitMQ 中

来自分类Dev

为什么`joblib.delayed`不能用作装饰器?

来自分类Dev

为什么hasattr执行@property装饰器代码块

来自分类Dev

为什么__new__没有classmethod装饰器

来自分类Dev

装饰器为什么必须将(this)应用于函数

来自分类Dev

为什么不需要staticmethod装饰器?

来自分类Dev

为什么包装装饰器显示多余的逗号?

来自分类Dev

Angular:为什么延迟加载装饰器不起作用?

Related 相关文章

热门标签

归档