最近想把之前写过的一些工具给整合起来,前端弄好了,现在主要是后端 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)
显然这是错的,因为运行报语法错误。
那么请问老哥们,应该如何写呢?
谢谢!👍👍
|      1christopheredwar      2021-07-02 14:38:52 +08:00 via Android  1 blueprint+namespace,目前参加的项目就是这么扩展 API 的 | 
|      2Via8veritas      2021-07-02 14:48:05 +08:00  1 用 add_url_rule 把方法和路由手动绑定 | 
|      3jk1030      2021-07-02 14:48:13 +08:00  1 blueprint 吧 | 
|  |      4sudoy OP |