面向对象的 Python 与 Flask 服务器?

新手上路,请多包涵

我正在使用 Flask 将一些数据处理代码公开为 Web 服务。我想要一些我的 Flask 函数可以访问的类变量。

让我带你走过我被困的地方:

 from flask import Flask
app = Flask(__name__)

class MyServer:
  def __init__(self):
    globalData = json.load(filename)

  @app.route('/getSomeData')
  def getSomeData():
    return random.choice(globalData) #select some random data to return

if __name__ == "__main__":
  app.run(host='0.0.0.0')

当我在 Flask 之外运行 getSomeData() 时,它工作正常。但是,当我用 Flask 运行它时,我得到 500 internal server error 。这里没有魔法,Flask 不知道它应该初始化一个 MyServer 对象。如何将 MyServer 的实例提供给 app.run() 命令?

可以 承认失败并将 globalData 放入数据库。但是,还有别的办法吗?

原文由 solvingPuzzles 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您可以在端点范围之外创建 MyServer 的实例并访问其属性。这对我有用:

 class MyServer:
    def __init__(self):
        self.globalData = "hello"

from flask import Flask
app = Flask(__name__)

my_server = MyServer()

@app.route("/getSomeData")
def getSomeData():
    return my_server.globalData

if __name__ == "__main__":
    app.run(host="0.0.0.0")

原文由 Muntaser Ahmed 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道这是一个迟到的回复,但我在遇到类似问题时遇到了这个问题。我发现 flask-classful 非常好。您从 FlaskView 继承您的类,并使用您的 MyServer 类注册 Flask 应用程序

http://flask-classful.teracy.org/#

在这种情况下,使用 flask-classful,您的代码将如下所示:

 from flask import Flask
from flask_classful import FlaskView, route

app = Flask(__name__)

class MyServer(FlaskView):
  def __init__(self):
    globalData = json.load(filename)

  @route('/getSomeData')
  def getSomeData():
    return random.choice(globalData) #select some random data to return

MyServer.register(app, base_route="/")

if __name__ == "__main__":
  app.run(host='0.0.0.0')

原文由 Abhimanyu Seth 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏