V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sudoy
V2EX  ›  问与答

请问 flask api 多个 app 放在一起怎么管理?

  •  
  •   sudoy · 160 天前 · 344 次点击
    这是一个创建于 160 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近想把之前写过的一些工具给整合起来,前端弄好了,现在主要是后端 API 这块。以下是为了方便举例我故意简化,实际开发中文件比较庞大:

    假设现在有 3 个 APP,分别叫“app1”, "app2", "app3"。如果是所有 app 的 api 都放在一个 app.py 文件,那就是:

    from flask import Flask
    from flask_cors import CORS
    
    
    app = Flask(__name__)
    CORS(app)
    
    @app.route('/api/app1/greeting/<inputText>', methods=['POST', 'GET'])
    def app1_greeting(inputText):
        return "Greeting from app1: Hello {}".format(inputText)
    
    
    @app.route('/api/app2/greeting/<inputText>', methods=['POST', 'GET'])
    def app2_greeting(inputText):
        return "Greeting from app2: Hello {}".format(inputText)
        
    @app.route('/api/app3/greeting/<inputText>', methods=['POST', 'GET'])
    def app3_greeting(inputText):
        return "Greeting from app3: Hello {}".format(inputText)
    
    
    
    if __name__ == '__main__':
        app.run()
    

    现在为了方便后期维护管理,我想把这些 app 写在不同的.py文件里面当作一个 package 来导入到主文件中,文件目录结构如下:

    那么我现在写成如下:

    # app.py
    
    
    from flask import Flask
    from flask_cors import CORS
    from app1 import app1_greeting
    from app2 import app2_greeting
    from app3 import app3_greeting
    
    
    app = Flask(__name__)
    CORS(app)
    
    
    @app.route('/api/app1/greeting/<inputText>', methods=['POST', 'GET'])
    app1_greeting()
    
    
    @app.route('/api/app2/greeting/<inputText>', methods=['POST', 'GET'])
    app2_greeting()
        
    @app.route('/api/app3/greeting/<inputText>', methods=['POST', 'GET'])
    app3_greeting()
    
    
    
    if __name__ == '__main__':
        app.run()
        # print(app1_greeting('John'))
    

    然后 package 如下:

    # app1.py
    
    def app1_greeting(inputText):
        return "Greeting from app2: Hello {}".format(inputText)
    

    显然这是错的,因为运行报语法错误。

    那么请问老哥们,应该如何写呢?

    谢谢!👍👍

    4 条回复    2021-07-05 10:10:11 +08:00
    christopheredwar
        1
    christopheredwar  
       160 天前 via Android   ❤️ 1
    blueprint+namespace,目前参加的项目就是这么扩展 API 的
    Via8veritas
        2
    Via8veritas  
       160 天前   ❤️ 1
    用 add_url_rule 把方法和路由手动绑定
    jk1030
        3
    jk1030  
       160 天前   ❤️ 1
    blueprint 吧
    sudoy
        4
    sudoy  
    OP
       157 天前
    @christopheredwar
    @Via8veritas
    @jk1030
    感谢各位的回复,非常有帮助!
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3035 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:28 · PVG 18:28 · LAX 02:28 · JFK 05:28
    ♥ Do have faith in what you're doing.