我有一个网站,里面有几个Flask应用程序,它们共享一些常见的属性,所以我创建了以下类:
import flask
class MyFlaskApp(flask.Flask):
def__init__(self, import_name):
super(MyFlaskApp, self).__init__(import_name)
# Set up some logging and template paths.
@self.errorhandler(404)
def my_404(self, error):
return flask.render_template("404.html"), 404
@self.before_request
def my_preprocessing(self):
# Do stuff to flask.request
然后我拥有的任何其他烧瓶应用程序都可以按如下方式使用它:
from myflaskapp import MyFlaskApp
app = MyFlaskApp(__name__)
@app.route("/my/path/")
def my_path():
return "I'm a pirate, prepare to die!"
然而,似乎我不能在类定义的上下文中使用那些装饰器。我怎么能实现这个目标呢?
答案 0 :(得分:3)
您可以将注册移至__init__
方法;那时候有一个self
引用:
class MyFlaskApp(flask.Flask):
def__init__(self, import_name):
super(MyFlaskApp, self).__init__(import_name)
# Set up some logging and template paths.
self.register_error_handler(404, self.my_404)
self.before_request(self.my_preprocessing)
def my_404(self, error):
return flask.render_template("404.html"), 404
def my_preprocessing(self):
# Do stuff to flask.request
我没有使用@app.errorhandler()
decorator,而是使用稍微方便app.register_error_handler()
method,但您仍然可以使用
self.errorhandler(404)(self.my_404)
如果你真的想要。 Flask对象上的注册装饰器都只是注册,它们不会改变装饰的功能或提供替换。