2015-11-25 78 views
0

我有这条巨蟒flask代码:蟒蛇烧瓶正常功能的装饰

@app.errorhandler(404) 
def not_found(e): 
    logg = open("server_log_404.txt", 'a') 
    logg.write("\r\n\r\n========================\n") 
    logg.write("%s\n" % datetime.datetime.today().ctime()) 
    logg.write("%s\n" % request.url) 
    logg.write("%s" % request.headers) 
    logg.write("%s\n" % str(request.form)) 
    logg.write("%s\n" % str(request.args)) 
    logg.close() 
    return render_template('404.html'), 404 

我需要改变功能logg在装修登录多个页面。我需要这样的功能:

@app.errorhandler(404) 
@make_logg 
def not_found(e): 
    return render_template('404.html'), 404 

可能吗?

回答

2

只需将其转化为一个装饰:

from functools import wraps 
def make_logg(f): 
    @wraps(f) 
    def wrapper(*args, **kwargs): 
     logg = open("server_log_404.txt", 'a') 
     logg.write("\r\n\r\n========================\n") 
     logg.write("%s\n" % datetime.datetime.today().ctime()) 
     logg.write("%s\n" % request.url) 
     logg.write("%s" % request.headers) 
     logg.write("%s\n" % str(request.form)) 
     logg.write("%s\n" % str(request.args)) 
     logg.close() 
     return f(*args, **kwargs) 
    return wrapper 
+0

也许这将需要使用'functools.wraps'因为瓶路由与功能名称的工作。 – Messa

+0

我试试这个,但给这个错误:http://pastebin.com/t747SkVF –

+0

@Messa是正确的,即时更新 – Netwave