gpt4 book ai didi

python - 使用 DispatcherMiddleware 实例组合 2 个 Flask 应用程序会导致第二个应用程序出现 404 错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:36 24 4
gpt4 key购买 nike

抱歉,我的问题含糊不清,我不知道如何更好地表达它。那么让我来解释一下我的问题。

我有 Flask 应用程序 libindic ,其中有 2 个 Flask 应用程序,一个是前端,另一个是 api。所以我的 wsgi.py 如下

from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware

from silpa import api, frontend
import os

conffile = os.path.join(os.path.dirname(__file__), "etc", "silpa.conf")

application = DispatcherMiddleware(frontend.create_app(conffile),
{'/api': api.create_app(conffile)})

if __name__ == "__main__":
run_simple('0.0.0.0', 5000, application,
use_reloader=True, use_debugger=True)

前端访问工作正常,但当我点击/api/JSONRPC 时,返回 404 错误。该规则在silpa/api/jsonrpc.py中定义如下

bp = Blueprint('api_jsonrpc', __name__, url_prefix='/api')


@route(bp, '/JSONRPC', methods=['POST'])
def handle_jsonrpc_call():
...

当我在 python 解释器中打印 application 和 application.app 和 application.mounts 的值时,我看到以下内容

>>> application.app
<Flask 'silpa.frontend'>
>>> application.mounts
{'/api': <Flask 'silpa.api'>}

我无法弄清楚为什么/api/JSONRPC 会导致 404。我不知道如何调试它。我确实检查了 api 应用程序的 app.url_map,并且可以看到在那里注册的/api/JSONRPC 规则。

如果有人能告诉我我可能做错了什么,那将是一个很大的帮助。

最佳答案

好的,在调试并单步执行 Flask 代码后,我找出了问题的原因。以下行实际上导致了问题

bp = Blueprint('api_jsonrpc', __name__, url_prefix='/api')

url_prefix 不应出现在代码中,因为我已经在 /api 处安装了此应用程序。添加 /api url_prefix 将生成以下 url,而不是 /api/api/JSONRPC。删除上面的行解决了问题。

因此,如果您使用 DispatcherMiddleware 将应用程序挂载到与 / 不同的挂载点,则不应在蓝图中使用url_prefix

关于python - 使用 DispatcherMiddleware 实例组合 2 个 Flask 应用程序会导致第二个应用程序出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com