首页 > 解决方案 > 未调用瓶钩 before_request

问题描述

我无法使用@_local_bottle.hook('before_request')。

在我从同一个文件运行瓶子的单个文件场景中,@_local_bottle.hook('before_request') 有效:

_local_bottle = bottle.Bottle()
def get_bottle():
    return _local_bottle

@_local_bottle.hook('before_request')
def connect_test():
    print("test _local_bottle.hook")

但是当我从加载所有子模块并合并它们的 start.py 启动瓶子时,不会调用钩子。

def start_server(debug=False):
    app, logger = setup_app(debug)
    logger.debug("Importing applications.")
    import ps_web_apps.load_modules

    for module, ps_bottle in ps_web_apps.load_modules.get_bottle_list():
        logger.debug("Importing application '%s'.", module)
        app.merge(ps_bottle)
    app = SessionMiddleware(app, session_opts)
    logger.debug("Starting server.")
    sys.argv[1:] = ["--workers", num_of_workers, "--timeout", gunicorn_timeout]
    if enable_gevent:
        logger.debug("Started as asyc gevent server.")
        bottle.run(app=app, port=8081, server='gunicorn', worker_class='gevent', debug=debug, quiet=not debug)
    else:
        bottle.run(app=app, port=8081, server='gunicorn', debug=debug, quiet=not debug)

奇怪的是像“get”这样的其他装饰器就在它旁边工作:

@_local_bottle.hook('before_request')
def connect_test():
    print("test _local_bottle.hook")

@_local_bottle.get('/portal')
def portal():
    logging.debug("log test")

为什么其他装饰器可以工作,而 @_local_bottle.hook('before_request') 被忽略?

标签: pythonbottle

解决方案


推荐阅读