我正在研究实施蓝图,但遇到了一些障碍.

我的应用程序有3个不同的模块

  • 客户端
  • 产品
  • 订单

在应用程序启动时,我加载了3个全局词典,每个模块一个. 订单模块同时使用客户端和产品字典,不是为了进行更改,而是作为参考.

我该如何将这些全局词典放到每个模块中呢?声明它们,然后将它们加载到每个蓝图中似乎是没有意义的

推荐答案

如果您有需要由多个模块(客户、产品和订单)访问的全局词典,则可以考虑使用共享上下文或全局对象来保存这些词典.这样,您不需要在每个Blueprint中分别声明和加载词典.

以下是一种可能的方法:

创建一个单独的模块或文件,我们将其命名为globals.py,以定义和初始化全局词典.

 # globals.py

 client_dict = {}
 product_dict = {}
 order_dict = {}

在主应用程序文件中,导入globals模块并加载词典.

# main.py

from flask import Flask
from globals import client_dict, product_dict, order_dict

app = Flask(__name__)

client_dict = load_client_data()
product_dict = load_product_data()
order_dict = load_order_data()

# Register your Blueprints or modules here

if __name__ == '__main__':
   app.run()

在需要访问这些字典的每个模块或蓝图中,从全局模块导入它们.

# client.py

from flask import Blueprint
from globals import client_dict

client_bp = Blueprint('client', __name__)

……

# product.py

from flask import Blueprint
from globals import product_dict

product_bp = Blueprint('product', __name__)

……

# order.py

from flask import Blueprint
from globals import client_dict, product_dict, order_dict

order_bp = Blueprint('order', __name__)

通过从每个模块或Blueprint中的全局模块导入词典,您可以直接访问和使用它们,而不需要单独声明或加载它们.对一个模块中的词典所做的任何更改都将在其他模块中反映出来,因为它们引用了相同的全局对象.

Python相关问答推荐

在使用Guouti包的Python中运行MPP模型时内存不足

通过交换 node 对链接列表进行 Select 排序

Python中的负前瞻性regex遇到麻烦

添加包含中具有任何值的其他列的计数的列

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

按列分区,按另一列排序

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如何从pandas的rame类继承并使用filepath实例化

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

未知依赖项pin—1阻止conda安装""

删除marplotlib条形图上的底边

在Python中使用yaml渲染(多行字符串)

判断Python操作:如何从字面上得到所有decorator ?

从嵌套极轴列的列表中删除元素

如何使用Azure Function将xlsb转换为xlsx?

在第一次调用时使用不同行为的re. sub的最佳方式

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?