对一个含糊的问题很抱歉,我不确定我能说的更好。因此,让我对我的问题进行解释。
我有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
。