将Flask路由添加到类的方法中

时间:2017-09-06 13:54:28

标签: python flask

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

我可以轻松设置一个“静态”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()

但我想要的是一个“动态”应用程序,其中一个服务器管理更改数据。我希望服务器在打开页面时提供最新的数据。所以我想做类似以下的事情:

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()

然而,这样做会引发错误:

TypeError: index() takes exactly 1 argument (0 given)

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

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

但这看起来格外凌乱!如果将路线附加到我想用来为页面提供服务的实际方法上,那将会更加清晰和合理。

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

非常感谢提前

0 个答案:

没有答案