首页 > 解决方案 > 按需运行 Flask 以可视化计算数据

问题描述

使用 Python 3.7,我制作了一个 CLI 实用程序,它将一些结果打印到标准输出。根据选项,结果应在浏览器中可视化(单用户,无会话)。Flask 似乎是一个不错的选择。但是,这不是文档或教程中描述的标准用例。

我正在寻找一种将数据(例如 Python 列表)传递给 Flask 应用程序的最佳实践方法,以便我可以从视图函数中返回它。基本上它将是不可变的应用程序数据。以下似乎有效,但我不喜欢使用全局变量:

主要.py:

import myapp

result = compute_stuff()
if show_in_browser:
  myapp.data = result
  myapp.app.run()

我的应用程序.py:

from flask import Flask
from typing import List

app = Flask(__name__)
result: List

@app.route("/")
def home():
  return f"items: {len(result)}"

阅读 Flask 文档,我觉得我应该使用应用程序上下文。另一方面,它的生命周期不跨越请求,我不知道如何填充它。阅读其他问题我可能会使用 Flask 配置对象,因为它似乎在每个请求中都可用。但这与配置无关。或者也许我应该使用Klein,受到这个答案的启发?

标签: python-3.xflask

解决方案


似乎没有最佳实践方法。所以我要修改我原来的方法:

class MyData:
    pass

class MyApp(Flask):
    def __init__(self) -> None:
        super().__init__(__name__)
        self.env = "development"
        self.debug = True

    def getData(self) -> MyData:
        return self._my_data

    def setMyData(self, my_data: MyData) -> None:
        self._my_data = my_data

app = MyApp()

通过这种方式,我可以在app创建实例后设置数据——这是能够在类外部定义的路由装饰器中使用它所必需的。有更多的封装会很好:使用app路由方法(使用装饰器)而不是访问模块全局app对象的模块全局函数。显然这不是烧瓶的。


推荐阅读