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

2021-07-02 14:28:56 +08:00
 sudoy

最近想把之前写过的一些工具给整合起来,前端弄好了,现在主要是后端 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)

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

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

谢谢!👍👍

893 次点击
所在节点    问与答
4 条回复
christopheredwar
2021-07-02 14:38:52 +08:00
blueprint+namespace,目前参加的项目就是这么扩展 API 的
Via8veritas
2021-07-02 14:48:05 +08:00
用 add_url_rule 把方法和路由手动绑定
jk1030
2021-07-02 14:48:13 +08:00
blueprint 吧
sudoy
2021-07-05 10:10:11 +08:00
@christopheredwar
@Via8veritas
@jk1030
感谢各位的回复,非常有帮助!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX