如果我有 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
?
您可以考虑使用蓝图
将应用程序分解为一组蓝图。这是大型应用的理想选择;一个项目可以实例化一个应用程序对象,初始化多个扩展,并注册一组蓝图。
例子:
# 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)
归档时间: |
|
查看次数: |
4221 次 |
最近记录: |