Python 如何从Flask中的另一个文件导入路由-请不要使用前端或查看库解决方案,仅适用于Flask后端的轻型解决方案
让我们以一个100%后端代码的样板烧瓶服务器为例 文件A:Python 如何从Flask中的另一个文件导入路由-请不要使用前端或查看库解决方案,仅适用于Flask后端的轻型解决方案,python,flask,Python,Flask,让我们以一个100%后端代码的样板烧瓶服务器为例 文件A: from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): return jsonify({"msg": "flask server live"}) if __name__ == '__main__': app.run(debug=True, threaded=True,
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return jsonify({"msg": "flask server live"})
if __name__ == '__main__':
app.run(debug=True, threaded=True, port=5070)
如果我想添加另一个路由,如('/test_route'),并从另一个文件(文件B)导入它,我该如何操作?这看起来很简单,但我遇到的所有其他答案都涉及到视图、蓝图、前端工具等方面。所有这些都是多余的,并且增加了膨胀。我只想用一种简单的方法从其他文件导入额外的路由,而无需向专用后端服务器添加前端或复杂性
换句话说,我如何避免将应用程序的每一条路由都放在一个文件中
在文件中添加类似的内容
from routes.file_b import file_b_routes
其中,文件B是类似于以下文件的文件:
from flask import jsonify, request
@app.route('/test', methods=['GET'])
def test():
return jsonify({"msg": "test route"})
遗憾的是,这不起作用,因为@app不存在于文件B中,当试图直接导入文件B时,会导致冲突错误。如果我理解正确: 假设要重用路由“/”(索引) 你应该做的是:
from routes.api_routes import api_routes
return api_routes.index()
returnjsonify({“msg”:“testroute”})
这有帮助吗?基本上,您已经清楚地解释了这个问题-在一个单独的文件中,没有可用的
app
实例
有两种方法可以解决这个问题
a) 把路线封闭起来
# file: other_routes
def init_views(app):
@app.route("/v1/overview")
def overview():
...
然后,您可以导入init_views
函数并初始化路由
from flask import Flask, jsonify
from other_routes import init_views
app = Flask(__name__)
init_views(app)
b) 使用蓝图
from flask import Blueprint
other_routes = Blueprint("other_routes", __name__)
@other_routes.route("/v1/overview")
def overview():
...
然后导入blueprint实例并注册它
from flask import Flask, jsonify
from other_routes import other_routes
app = Flask(__name__)
app.register_blueprint(other_routes)
我不会把两三行代码称为过度使用和膨胀——这只是它的工作方式
我对FlaskCon2020的视频推荐不够。烧瓶的一些基本概念得到了非常好的解释
我建议看一看关于应用程序工厂模式的,这也解释了蓝图的概念:
不,为了清楚起见,我可能需要编辑问题。文件A包含路由(“/”)。我并没有试图重复使用文件B中的路由“/”,而是试图在文件B中添加额外的路由,并在文件A中从文件B导入这些额外的路由。现在,我所能做的就是将我的应用程序的每个路由都添加到文件A中。