停止 Flask 复制加载的变量

2023-12-09

我正在构建一个基本的云基础设施管理站点,但列出虚拟机的页面有问题。

Flask 应用程序会拉取通过各种云平台的 API 生成的列表,格式如下:

vm_list = {
    'vmid': [],
    'name': [],
    'state': [],
    'platform': []
}

该列表是通过循环 API 输出并附加每个值来填充的,如下所示:

def zip_list():
    ...
    for node in driver.list_nodes():
        vm_list["vmid"].append(node.uuid)
        vm_list["name"].append(node.name)
        vm_list["state"].append(node.state)
        vm_list["platform"].append(driver.name)
    ...
        myVms = zip(vm_list['name'], vm_list['vmid'], vm_list['platform'], vm_list['state'])
        return myVms

我通过我的烧瓶应用程序加载它,如下所示:

@app.route('/vms/')
def vms():
    myVms = {}
    myVms = vm.zip_list()
    return render_template('VMs.html', vm_list=myVms)

The VMs.html页面将此数据加载到表中:

<table class="tableClass">
  <tr>
    <th>Name</th>
    <th>id</th>
    <th>Plaform</th>
    <th>State</th>
  </tr>
  {% for row in vm_list %}
  <tr>
    <td>{{ row[0] }}</td>
    <td>{{ row[1] }}</td>
    <td>{{ row[2] }}</td>
    <td>{{ row[3] }}</td>
  <tr>
  {% endfor %}
</table>

这工作正常,按预期加载数据。然而我的问题是每次刷新页面时,数据都会再次加载并附加到列表中,从而使表大小加倍。每次刷新都会增加整体vm_list再次列出表。

我原以为这可以通过“无效”来解决myVms每次调用时都会变量(即myVms = {})在烧瓶应用程序脚本和/或zip_list功能,但似乎不起作用;问题仍然存在。

我也调查过烧瓶缓存看看每次重新加载时清除 Flask 的缓存是否会修复它,但似乎不会。

我想我可以更改 html 文件中的某些内容以强制每个会话仅加载一次或类似的内容,但我的前端技能还没有达到那么远。

有谁知道在这种情况下我能做什么或者我哪里出错了?任何意见是极大的赞赏。


你很接近 - 你每次实际需要重置的变量不是myVms but vm_list, 如下:

class Node:
    counter = 0

    def __init__(self):
        c_str = str(Node.counter)
        self.uuid = "asdf" + c_str
        self.name = "test " + c_str
        self.state = "wow " + c_str + " such state"
        Node.counter += 1


class Driver:
    def __init__(self, number_of_nodes):
        self.nodes = []
        for x in range(number_of_nodes):
            self.nodes.append(Node())
        self.name = "the greatest driver"

    def list_nodes(self) -> list:
        return self.nodes


driver = Driver(10)


def zip_list():
    vm_list = {'vmid': [], 'name': [], 'state': [], 'platform': []}
    for node in driver.list_nodes():
        vm_list["vmid"].append(node.uuid)
        vm_list["name"].append(node.name)
        vm_list["state"].append(node.state)
        vm_list["platform"].append(driver.name)

    myVms = zip(vm_list['name'], vm_list['vmid'], vm_list['platform'], vm_list['state'])
    return myVms


print("First time:")

my_list = zip_list()
for i in my_list:
    print(i)

print("Second time:")

my_list = zip_list()
for i in my_list:
    print(i)

如果你初始化vm_list之外的zip_list()相反,你会看到你正在经历的加倍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停止 Flask 复制加载的变量 的相关文章

随机推荐

  • 无法执行不同的投影查询

    我有一个简单的小 观察 课 from google appengine ext import ndb class Observation ndb Model remote id ndb StringProperty dimension id
  • 在 MVC3 中使用 WebApi

    使用 WebApi 在 MVC 客户端中使用服务的最佳方式是什么 如果响应返回为
  • PHP数据库连接实践

    我有一个连接到多个数据库 Oracle MySQL 和 MSSQL 的脚本 每次脚本运行时可能不会使用每个数据库连接 但所有数据库连接都可以在单个脚本执行中使用 我的问题是 即使所有连接可能都没有被使用 最好在脚本开始时连接到所有数据库一次
  • 基于范围的 for 如何适用于普通数组?

    在 C 11 中 您可以使用基于范围的for 其作用为foreach其他语言的 它甚至适用于普通的 C 数组 int numbers 1 2 3 4 5 for int n numbers n 2 它如何知道何时停止 它是否仅适用于已在同一
  • 为什么同样的方法在 Swift 的数组扩展中会失败?

    当我尝试打电话时 我的行为很奇怪sort 从数组扩展中 例如此方法 func test let a 1 2 3 sort a x y in x lt y 可以单独工作 但在内部时会失败Array扩大 extension Array func
  • 从字节数组中创建新的 FileStream

    我正在尝试从字节数组创建一个新的 FileStream 对象 我确信这根本没有意义 所以我将在下面尝试更详细地解释 我正在完成的任务 1 读取之前的源文件压缩的2 使用GZipStream解压数据 3 将解压后的数据复制到字节数组中 我想改
  • Android 设备重启后广播接收器不工作

    我已经检查了所有相关问题 但没有找到解决此问题的方法 所以这对我来说绝对是一个新问题 我拥有的 我有一个 Android 应用程序 它在其清单中注册了一些广播接收器 这就是我的清单的样子
  • JavaFX:父级及其子级的鼠标单击事件

    我有一张卡片 由页眉 正文和页脚组成 可以包含更多节点 如标签 文本字段等 我需要抓住on mouse clicked单击发生时的任何时间事件卡内 无论它是卡本身还是它的子卡之一 现在 如果我单击文本字段 则不会触发事件 private S
  • 在发布的 Android 应用程序中完全禁用 LogCat 输出?

    关闭my own在将应用程序发布到市场之前 应用程序的 LogCat 输出非常简单 我还知道如何通过标签和 或 id 有选择地过滤 LogCat 消息 以方便我自己的调试 但现在我对一些可能更困难 也许不可能 的事情感兴趣 禁用所有 Log
  • 如何在zend框架中添加新类并自动加载

    我是 Zend 框架的新手 第一次使用它 我正在寻找可以在很短的时间内阅读的简单基础教程 如果我想在 Zend 库中添加新类 我也坚持这样做 当我制作任何新控制器时 它也应该自动加载 如果您有意见 请提出您的意见 Regards 这在一开始
  • 在基本身份验证 URL 中转义用户名字符

    使用http基本身份验证时 可以在URL中传递用户名 例如 http email protected path 但现在假设用户名是电子邮件地址 例如 电子邮件受保护 这样做显然是不明确的 http email protected foo c
  • LESS:您可以将 CSS 选择器与媒体查询分组吗?

    我真的很高兴发现您可以创建一个媒体查询变量 您可以轻松地重用该变量并使您的代码更具可读性 tablet min width 768px and max width 980px media tablet 我想知道是否可以将媒体查询与选择器分组
  • IBM Worklight - 如何更改默认的“Worklight 设置”字符串?

    有没有办法更改 Android 选项菜单中 Worklight 提供的默认 Work Light 设置 字符串 Update 稍微纠正一下答案 Yes 打开您的App is 位于yourProject apps yourApp common
  • 在eclipse中使用java库

    我对 eclipse 有点陌生 想要使用以下库 以便我可以使用它们实现的对象 HttpClient 和 Java csv 我如何导入这些库以便我可以用它们编写一些java http hc apache org downloads cgi h
  • 使用 JsonReader 而不是 JsonSerializer 时自定义 JsonConverter 不起作用

    我有课Foo和它的FooConverter定义如下 JsonConverter typeof FooConverter public class Foo public string Something get set public clas
  • 是否有一个 iOS“厨房水槽”应用程序可以在任何地方获取源代码? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在学习 iOS 开发
  • 带有 {fmt} 的自定义格式说明符用于自定义类

    在格式化我自己的自定义类型时 我将如何允许自定义填充等 struct S int x template lt gt struct fmt formatter
  • Sqlite 检查逗号分隔的数字字符串是否包含数字

    如何检查Sqlite中的字符串是否包含数字 该字符串是逗号分隔的正数 不以 0 开头 我需要检查它是否包含其他数字 Ex Is 5 in 1 2 1 gt 否 Is 5 in 35 55 15 gt 否 Is 5 in 5 gt 是的 Is
  • 如何从 9 个大小为 N 的数组快速创建 N 个 3x3 矩阵的数组?

    假设我有 9 个大小为 N 的数组 A B C J 我想创建一个由 N 3x3 矩阵组成的新数组 例如 matrices i A i B i C i D i E i F i G i H i J i 一个简单的解决方案是将每个条目添加到数组中
  • 停止 Flask 复制加载的变量

    我正在构建一个基本的云基础设施管理站点 但列出虚拟机的页面有问题 Flask 应用程序会拉取通过各种云平台的 API 生成的列表 格式如下 vm list vmid name state platform 该列表是通过循环 API 输出并附