将Flask路由添加到类的方法

Gar*_*ams 5 python flask

我正在尝试编写服务器来管理一些数据并提供网页。我想使用Flask,Python网络框架。

我可以轻松地设置一个“静态” Flask应用程序,该应用程序为固定数据页面提供服务,例如

from flask import Flask, render_template

DATA = [1, 2, 3]

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'

@app.route('/')
def index():
    return render_template('mytemplate.html', data=DATA)

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

但是我想要的是一个带有服务器的“动态”应用程序,该服务器可以管理不断变化的数据。我希望服务器在打开页面时提供最新数据。因此,我想执行以下操作:

from flask import Flask, render_template

app = Flask(__name__)

class Server():
    def __init__(self, data):
        self.data = data

    ###
    ### Other long-running methods which might update self.data
    ###

    @app.route('/') # <--- causes an error
    def index(self):
        return render_template('mytemplate.html', data=self.data)

if __name__ == '__main__':
    s = Server([1, 2, 3])
    ### Spawn long-running methods
    app.run()
Run Code Online (Sandbox Code Playgroud)

但是,这样做会引发错误:

TypeError: index() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

我已经看到,在实例化服务器后,可以通过以下方法将我的方法包装在类定义之外的Flask路由中来实现所需的目标:

if __name__ == '__main__':
    s = Server([1, 2, 3])
    ### Spawn long-running methods that might update s.data
    app.route('/')(s.index)
    app.run()
Run Code Online (Sandbox Code Playgroud)

但这似乎异常混乱!如果将路由附加到我想用来提供页面的实际方法上,将会更加清晰和逻辑化。

所以我的问题是:是否可以将Flask路由直接添加到类中的方法?

提前谢谢了