在烧瓶蓝图中保留“全局”变量

cor*_*vid 1 python flask python-2.7

假设我有一个相当基本的主应用程序,然后是一系列通往其他页面的蓝图。然后我有模块可以读取 csv 并使用数据来执行功能

from py_csv_entry import entry
class python_csv:
  def __init__(self, csv_location):
    self.data = []
    self.read_csv(csv_location)

  def read_csv(self):
    with open(csv_location + 'python_csv.csv') as csv_data:
      read = csv.reader(csv_data):
      for row in read:
        self.data.append(entry(*row))
Run Code Online (Sandbox Code Playgroud)

我想在我的蓝图中使用这个模块来包含数据。

在应用程序上,我通常会这样做:

app.config['python'] = python_csv('/path/to/file')
Run Code Online (Sandbox Code Playgroud)

当我尝试使用蓝图执行此操作时,会引发以下错误:

AttributeError: 'Blueprint' object has no attribute 'config'
Run Code Online (Sandbox Code Playgroud)

从蓝图的角度来看,您将如何绑定全局变量?

Mar*_*ers 5

如果这是一般“全局”的不变数据,则将其保持为全局即可。只需将其放入模块中,在模块加载时读取 CSV,然后使用该数据即可。

否则,蓝图会从应用程序对象获取配置;配置是一个应用程序(站点)与下一个应用程序(站点)之间发生变化的内容,但允许您重用您的蓝图。由于此类配置与应用程序相关联,并且蓝图仅读取该配置。

蓝图只是视图组、关联的信号处理程序(before_requestafter_request等),让您可以重用该组或轻松地禁用该组视图。它们仍然在 Flask 应用程序的上下文中运行,因此它们始终可以访问应用程序配置。

因此,如果您希望 CSV 模块的路径可配置,请在应用程序配置中进行设置,并使用挂钩Blueprint.record_once()根据应用程序配置读取 CSV 文件。