我有一个包含多条路线的Flask应用。我定义了一个Utility类,该类几乎没有方法来处理常用功能,例如。获取一些属性等。现在,我想在公共位置创建Utility类的实例,以供每个路由中的函数使用。我该如何实现?
from flask import Flask, request, jsonify
import mysql.connector as mariadb
app = Flask(__name__)
@app.route('/aaa/bbb/ccc',methods=['POST'])
def func1():
pass
@app.route('/xxx/yyy/zzz',methods=['POST'])
def func2():
pass
@app.route('/abc/dfg/ijk',methods=['POST'])
def func3():
pass
class Utility:
def get_properties():
pass
def get_database_conn():
pass
if __name__ == "__main__":
app.run(host='127.0.0.1', port=5000, debug=True)
现在,我想做类似的事情-
util_obj = Utility()
在应用程序的开头,因此我可以从任何一条路线中调用实用程序方法,而不必每次都创建对象。
实现此目标的最佳方法是什么?
答案 0 :(得分:1)
您描述的内容似乎与大多数Flask扩展(例如Flask-SQLAlchemy或Flask-Caching)具有相同的结构,即具有一个全局配置的实例,可以在必要时导入或调用该实例。
在大型应用程序中,应将这些实例创建在extensions.py
之类的文件中,远离创建app
的地方,以避免循环导入,但是对于单个文件,则不要不必担心。相反,我只是将Utility
的类定义移至定义app
的位置下方,然后在类定义的下方创建util_obj
。
from flask import Flask, request, jsonify
import mysql.connector as mariadb
app = Flask(__name__)
class Utility:
def get_properties():
# you can access app here!
pass
def get_database_conn():
pass
util_obj = Utility()
@app.route('/aaa/bbb/ccc',methods=['POST'])
def func1():
# you can access util_obj here!
pass
@app.route('/xxx/yyy/zzz',methods=['POST'])
def func2():
pass
@app.route('/abc/dfg/ijk',methods=['POST'])
def func3():
pass
if __name__ == "__main__":
app.run(host='127.0.0.1', port=5000, debug=True)