2016-01-21 4 views
0

Я использую 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() 

, но это выглядит неловко.

Есть ли способ подключить функцию предварительной обработки на глобальном уровне? (? Так что каждый вызов идет, хотя это)

+2

как об использовании декораторов – realli

+0

@realli: не будет ли это более или менее одинаковым (один декоратор за функцию, аналогичный моему вызову 'preprocessing())? – WoJ

+0

да, попробуйте плагин для бутылок http://bottlepy.org/docs/dev/plugindev.html#bottle.Plugin – realli

ответ

4

Я думаю, что вы можете использовать плагин флакона в

документ здесь: 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() 
Смежные вопросы