Python 如何从Flask中的另一个文件导入路由-请不要使用前端或查看库解决方案,仅适用于Flask后端的轻型解决方案

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,

让我们以一个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, 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中。