Blueprint Flask在不同文件中的路由如何访问共享对象

时间:2014-12-19 12:30:05

标签: python-2.7 flask

我有一个Flask服务器,它有两组路由 - 一个集合将数据作为JSON返回,另一个集合将数据作为网页返回。我想为每个集合分别创建一个文件,因此我将使用蓝图。路径功能使用在顶层中实例化的常见对象。如何传递对这些对象的引用,以便路由函数可以看到它们?

请参阅下面的简化示例(仅显示一个蓝图)。我见过类似的问题,但由于我对python的掌握有限,我无法完全理解(例如,我需要所有路由和客户端连接来访问相同的对象实例)。

main.py ...

#!/usr/bin/python
from flask import Flask, Blueprint
from my_routes import *

class Class1():
    def __init__(self):
        self.prop1=11
    . . . 


# This object is accessed by both sets of routes
obj1 = Class1()

app = Flask(__name__)
app.register_blueprint(api_v1_0)

app.run()

json_routes.py ...

from flask import Flask, Blueprint

api_v1_0 = Blueprint('api_v1_0', __name__)

@api_v1_0.route("/route1", methods=["GET"])
def route1():
    . . . 
    v1 = obj1.method1()  # How does this function get a reference to obj1?
    . . .

1 个答案:

答案 0 :(得分:1)

要在json_routes中访问obj1,您必须在json_route文件中声明它的活动引用。

所以你可以做的是在一个单独的文件class1.py中声明和实例化你的对象:

class Class1():
    def __init__(self):
        self.prop1=11

# This object is accessed by both sets of routes
obj1 = Class1()

在每个路径文件中,您可以像这样获取实例:

from class1 import obj1

你的主文件应该是这样的:

#!/usr/bin/python
from flask import Flask, Blueprint
from my_routes import *

app = Flask(__name__)
app.register_blueprint(api_v1_0)
app.run()