python为装饰提供了正常功能

python为装饰提供了正常功能,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

我有一个python
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'))