如何预处理所有通话?

时间:2016-01-21 08:20:38

标签: python bottle

我使用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()

但这看起来很尴尬。

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

1 个答案:

答案 0 :(得分:4)

我认为你可以使用瓶子的插件

doc here: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()