python-3.x - 按需运行 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,受到这个答案的启发?
解决方案
似乎没有最佳实践方法。所以我要修改我原来的方法:
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
对象的模块全局函数。显然这不是烧瓶的。
推荐阅读
- javascript - 如何正确使用 v-show 渲染我的元素?
- mongodb - 使用 bash 脚本在换行符中为 Mongodump 命令传递 MongoDB 用户密码
- php - Docusign - 授权代码授予 - 获取访问令牌时未执行重定向 uri
- c# - 如何将 URL 从 ListView 项传递到 Web 浏览器 URL
- ruby-on-rails - 在 Heroku 上部署 rails+react 应用程序时设置 procfile 时遇到问题
- c++ - 递归函数的返回类型推导
- sql-server - SQL Server 架构集合中的可重用 simpleType 定义
- javascript - 打字稿,如何引用未导出的 OAuth2Client?google-api-nodejs-客户端
- omnet++ - 如何构建一个简单的网络来测试 omnet++ 中的 DASH 自适应比特率流技术?
- qt - QtQuick 绘制形状和颜色,但不绘制文本