2016-05-15 20 views
1

對不明確的問題,我不確定我能說得更好。所以讓我來解釋我的問題。使用DispatcherMiddleware實例結合使用2個Flask應用程序導致第二個應用程序使用404結果

我有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(): 
    ... 

如下當我打印應用程序和application.app和application.mounts在Python解釋器的價值我看到folllowing

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

我我無法弄清楚爲什麼/ api/JSONRPC會導致404錯誤。我不知道如何調試它。我沒有檢查api應用程序的app.url_map,我可以看到在那裏註冊的/ api/JSONRPC的規則。

如果有人能告訴我我可能會做錯什麼,這將是一個很大的幫助。

+0

'@ bp.route('/ JSONRPC',methods = ['POST'])'? –

+0

@ lord63.j抱歉,我不明白你想說什麼。 bp.route在路由裝飾器內完成。 – copyninja

+0

'@route(bp,'/ JSONRPC',methods = ['POST'])'this line can work? –

回答

1

確定調試完成並逐步完成Flask代碼後,我找出了問題的原因。以下行實際上導致了該問題

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

url_prefix不應該出現在代碼,因爲我已經在/api安裝這個應用程序。添加/api url_prefix將導致以下url而不是/api/api/JSONRPC。刪除上面的行解決了這個問題。

因此,如果您正在使用DispatcherMiddleware在不同的掛載點上掛載您的應用程序,那麼您不應該在藍圖中使用url_prefix

相關問題