V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
sudoy
V2EX  ›  问与答

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

  •  
  •   sudoy · Jul 2, 2021 · 1568 views
    This topic created in 1761 days ago, the information mentioned may be changed or developed.

    最近想把之前写过的一些工具给整合起来,前端弄好了,现在主要是后端 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 replies    2021-07-05 10:10:11 +08:00
    christopheredwar
        1
    christopheredwar  
       Jul 2, 2021 via Android   ❤️ 1
    blueprint+namespace,目前参加的项目就是这么扩展 API 的
    Via8veritas
        2
    Via8veritas  
       Jul 2, 2021   ❤️ 1
    用 add_url_rule 把方法和路由手动绑定
    jk1030
        3
    jk1030  
       Jul 2, 2021   ❤️ 1
    blueprint 吧
    sudoy
        4
    sudoy  
    OP
       Jul 5, 2021
    @christopheredwar
    @Via8veritas
    @jk1030
    感谢各位的回复,非常有帮助!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5580 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 07:03 · PVG 15:03 · LAX 00:03 · JFK 03:03
    ♥ Do have faith in what you're doing.