Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将任意参数传递给逻辑图?_Python_Oop_Flask_Arguments_Blueprint - Fatal编程技术网

Python 如何将任意参数传递给逻辑图?

Python 如何将任意参数传递给逻辑图?,python,oop,flask,arguments,blueprint,Python,Oop,Flask,Arguments,Blueprint,我有一个烧瓶api,我把它包在一个物体里。这样做使单元测试变得轻而易举,因为我可以使用各种不同的设置来实例化api,具体取决于它是在生产、测试中,还是您拥有的 我现在尝试稍微扩展一下api,为此我使用了一个蓝图。问题是,我不知道如何将参数传递给蓝图。我的路线需要访问哪个数据库之类的信息,而这些信息不是静态的。如何将这些信息传递到蓝图中?我以下面的代码为例: api.py: class MyApi(object): def __init__(self, databaseURI):

我有一个烧瓶api,我把它包在一个物体里。这样做使单元测试变得轻而易举,因为我可以使用各种不同的设置来实例化api,具体取决于它是在生产、测试中,还是您拥有的

我现在尝试稍微扩展一下api,为此我使用了一个蓝图。问题是,我不知道如何将参数传递给蓝图。我的路线需要访问哪个数据库之类的信息,而这些信息不是静态的。如何将这些信息传递到蓝图中?我以下面的代码为例:

api.py:

class MyApi(object):
    def __init__(self, databaseURI):
     self.app = Flask(__name__)
     self.app.register_blueprint(myblueprint)
blueprint.py

myblueprint= Blueprint('myblueprint', __name__)
@myblueprint.route('/route', methods=['GET'])
def route():
  database = OpenDatabaseConnection(databaseURI)
这里有一个相关的问题:


但是回答这个问题的人解决了op的用例特定问题,却没有真正回答如何将任意参数传递给蓝图的问题。

您可以在构造函数中动态创建蓝图:

def construct_blueprint(database):

    myblueprint = Blueprint('myblueprint', __name__)

    @myblueprint.route('/route', methods=['GET'])
    def route():
        database = database

    return(myblueprint)

通过这种方式,可以在appfactory中添加蓝图并传递参数。有时你会需要它,但它没有在烧瓶文档中的任何地方描述

假设bp1.py、bp2.py与您的
appname

from appname import bp1, bp2

app.register_blueprint(bp1.bp)
# with parameters:
app.register_blueprint(bp2.construct_blueprint(arg1, arg2))
内部
bp2.py

def construct_blueprint(arg1, arg2):
    bp = Blueprint("bp2", __name__)

    @bp.route('/test')
    def test():
        ret = {'arg1': arg1, 'arg2': arg2}
        return jsonify(ret)

    return bp

好主意!我当然很感激。这里的问题是,我想使用蓝图的部分原因是为了组织。我真的不想要一个几千行长的python文件。我想把蓝图分成不同的文件。据我所知,在python中不可能跨多个文件传播类定义。我意识到我可以创建一个“扩展”类链,但这似乎有点老土。是什么阻止你将该函数放入一个模块,然后使用它
myblueprint=module.construct_blueprint(database)
?这只是我一天的疲劳。谢谢你,先生。