mel*_*r55 9 python oop arguments blueprint flask
我有一个烧瓶api,我把它包裹在一个物体里.这样做使得单元测试变得轻而易举,因为我可以使用各种不同的设置来实例化api,具体取决于它是在生产,测试还是生产中.
我现在正在尝试扩展api,为此我正在使用蓝图.问题是我无法弄清楚如何将参数传递给蓝图.我的路由需要访问哪些数据库等信息,并且该信息不是静态的.如何将此信息传递到蓝图中?我在下面列出了代码作为示例:
api.py:
class MyApi(object):
def __init__(self, databaseURI):
self.app = Flask(__name__)
self.app.register_blueprint(myblueprint)
Run Code Online (Sandbox Code Playgroud)
blueprint.py
myblueprint= Blueprint('myblueprint', __name__)
@myblueprint.route('/route', methods=['GET'])
def route():
database = OpenDatabaseConnection(databaseURI)
Run Code Online (Sandbox Code Playgroud)
这里有一个相关的问题: 如何将构造函数参数传递给Flask蓝图?
但是回答这个问题的人解决了op的用例特定问题而没有真正回答如何将任意参数传递给蓝图的问题.
syn*_*nym 19
您可以在构造函数中动态创建蓝图:
def construct_blueprint(database):
myblueprint = Blueprint('myblueprint', __name__)
@myblueprint.route('/route', methods=['GET'])
def route():
database = database
return(myblueprint)
Run Code Online (Sandbox Code Playgroud)
使用Flask 配置系统( app.config) 来存储所有配置数据,然后使用. 从您的蓝图中读取您的应用程序上下文current_app。
存储在app.config:
app.config[DATABASE_URI] = databaseURI
Run Code Online (Sandbox Code Playgroud)
读取应用程序上下文:
databaseURI = current_app.config[DATABASE_URI]
Run Code Online (Sandbox Code Playgroud)
示例代码
主要.py
from flask import Flask
from blueprint import myblueprint
app = Flask(__name__)
app.register_blueprint(myblueprint)
app.config[DATABASE_URI] = databaseURI
Run Code Online (Sandbox Code Playgroud)
蓝图.py
from flask import current_app
myblueprint= Blueprint('myblueprint', __name__)
@myblueprint.route('/route', methods=['GET'])
def route():
databaseURI = current_app.config[DATABASE_URI]
database = OpenDatabaseConnection(databaseURI)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |