我正在尝试编写服务器来管理一些数据并提供网页服务。我想使用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路由直接添加到类中的方法?
非常感谢提前