对于含糊不清的问题我很抱歉,我不确定我能把它变得更好。所以让我解释一下我的问题。
我有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.app以及application.mounts的值时,我会看到以下内容
>>> application.app
<Flask 'silpa.frontend'>
>>> application.mounts
{'/api': <Flask 'silpa.api'>}
我无法弄清楚为什么/ api / JSONRPC导致404.我不知道如何调试它。我确实检查了api应用程序的app.url_map,我可以在那里看到/ api / JSONRPC的规则。
如果有人可以告诉我我可能做错了什么,那将是一个很大的帮助。
答案 0 :(得分:1)
确定调试并单步执行Flask代码后,我找出了问题的原因。以下行实际上导致了问题
bp = Blueprint('api_jsonrpc', __name__, url_prefix='/api')
url_prefix
不应该出现在代码中,因为我已经在/api
安装了此应用。添加/api
url_prefix将导致跟随网址/api/api/JSONRPC
。删除上述行修复了问题。
因此,如果您使用/
在DispatcherMiddleware
的不同挂载点上宣传您的应用,则不应在蓝图中url_prefix
。