如何预处理所有调用?

How to preprocess all calls?

我使用 bottle.route() 将 HTTP 查询重定向到适当的函数

import bottle

def hello():
    return "hello"

def world():
    return "world"

bottle.route('/hello', 'GET', hello)
bottle.route('/world', 'GET', world)
bottle.run()

我想为每个调用添加一些预处理,即对源 IP(通过 bottle.request.remote_addr 获得)进行操作的能力。我可以在每条路线中指定预处理

import bottle

def hello():
    preprocessing()
    return "hello"

def world():
    preprocessing()
    return "world"

def preprocessing():
    print("preprocessing {ip}".format(ip=bottle.request.remote_addr))

bottle.route('/hello', 'GET', hello)
bottle.route('/world', 'GET', world)
bottle.run()

但这看起来很尴尬。

有没有办法在全局级别插入预处理功能?(以便每次调用都通过它?)

我觉得你可以使用 bottle 的插件

文档在这里:http://bottlepy.org/docs/dev/plugindev.html#bottle.Plugin

代码示例

import bottle

def preprocessing(func):
    def inner_func(*args, **kwargs):
        print("preprocessing {ip}".format(ip=bottle.request.remote_addr))
        return func(*args, **kwargs)
    return inner_func

bottle.install(preprocessing)

def hello():
    return "hello"


def world():
    return "world"

bottle.route('/hello', 'GET', hello)
bottle.route('/world', 'GET', world)
bottle.run()