python为装饰提供了正常功能
我有一个pythonpython为装饰提供了正常功能,python,flask,Python,Flask,我有一个pythonflaskcode: @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.u
flask
code:
@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
有可能吗?只需将其转换为装饰器:
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
可能需要使用
functools.wrapps
,因为Flask路由与函数名一起工作。@selfmarket.net,请尝试此更改,而不使用wrapps im更改function@pages.route('/contacts.html')def contacts():返回呈现模板('pages/contacts.html'))