Flask 路由到不同模块中具有相同名称的函数

Ell*_*ods 5 python flask

如果我有 2 个文件,例如:

moduleA.py

from MyPackage import app

@app.route('/moduleA/get')
def get():
    return "a"
Run Code Online (Sandbox Code Playgroud)

moduleB.py

from MyPackage import app

@app.route('/moduleB/get')
def get():
    return "b"
Run Code Online (Sandbox Code Playgroud)

并在__init__.py

from flask import Flask
import IPython
import logging

app = Flask(__name__,
        static_url_path='', 
        static_folder='static',
        template_folder='templates')
from MyPackage import moduleA, moduleB
Run Code Online (Sandbox Code Playgroud)

然后flask会抛出错误AssertionError: View function mapping is overwriting an existing endpoint function: get

我认为 python 本身在这里没有看到冲突,因为这些函数位于两个单独的模块中,但 Flask 却有。这里有更好的标准可以使用,还是我必须将函数名称命名为这样def getModuleA

Iva*_*hoo 5

您可以考虑使用蓝图

将应用程序分解为一组蓝图。这是大型应用的理想选择;一个项目可以实例化一个应用程序对象,初始化多个扩展,并注册一组蓝图。

例子:

# module_a.py
from flask import Blueprint

blueprint = Blueprint('module_a', __name__)

@blueprint.route('/get')
def get():
    return 'a'

# module_b.py
from flask import Blueprint

blueprint = Blueprint('module_b', __name__)

@blueprint.route('/get')
def get():
    return 'b'

# app.py
from flask import Flask
from module_a import blueprint as blueprint_a
from module_b import blueprint as blueprint_b


app = Flask(__name__)
app.register_blueprint(blueprint_a, url_prefix='/a')
app.register_blueprint(blueprint_b, url_prefix='/b')

# serves:
#  - /a/get
#  - /b/get
Run Code Online (Sandbox Code Playgroud)