2016-08-11 94 views
0

我已經定義了multplie服務的URL,所有這些將執行相同的代碼。Python瓶自動重定向消息

@service.route('/get_info/env=<path:env>/starttime=<int:starttime>/endtime=<int:endtime>/entire=<entire>/over=<over>/stage=<stage>', defaults={'name': None}, strict_slashes=False) 
@service.route('/get_info/dir=<path:dir>/starttime=<int:starttime>/endtime=<int:endtime>/entire=<entire>/over=<over>', defaults={'stage': 'ABC', 'name': None}, strict_slashes=False) 

@servicelog.operation('GetInfo') 
def get_deployment_info(env, starttime, endtime, finished, stage, fleetwide, hostname): 
global _misc 
try: 
    log.info("Dir: %s, Starttime: %d, Endtime: %d, name: %s, finished:%s, Stage:%s, Fleetwide: %s", dir, starttime, endtime, name,over, stage, entire) 
    result = obj.get_info(dir, starttime, endtime, entire, over, stage, name) 

如果我要調用與以下參數的服務,它按預期工作:

http://<endpoint>/get_info/dir=home/user/test/starttime=1470439200/endtime=1470856027/entire=true/over=true 

但是,如果我得到調用與以下參數的服務,得到了一個重新直接消息:

http://<endpoint>/get_info/dir=home/user/test/starttime=1470439200/endtime=1470856027/entire=true/over=true/stage=ABC 

我得到的錯誤是

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>Redirecting...</title> 
<h1>Redirecting...</h1> 
<p>You should be redirected automatically to target URL: <a href="http://endpoint/get_info/dir%3Dhome/user/test/starttime%3D1470439200/endtime%3D1470856027/entire%3Dtrue/over%3Dtrue">http://endpoint/get_info/dir%3Dhome/user/test/starttime%3D1470439200/endtime%3D1470856027/entire%3Dtrue/over%3Dtrue</a>. If not click the link.%  

我在這裏做了什麼不正確的事嗎?由於我沒有定義任何類型的重定向,我並不期待這樣的消息。它應該執行該方法,而不管使用哪個url。

回答

0

您構建路線的方式並不十分乾淨。具有參數的GET請求應該採用 http://server/route?arg1=val1&arg2=val2& ..等格式。我非常確定某些特殊字符或某些解析問題是造成此錯誤的原因。

使用request.args.get('arg1')在您的GET請求處理程序中檢索已解析的參數1的值(頂部不要忘記from flask import request)。爲了讓整個字符串使用request.query_string

this SO問題。

+0

感謝您的回覆。有更多的挖掘周圍。如果我通過'stage = ABC',會發生這種情況,並且我爲第二個替代url定義了階段的默認值爲ABC。不知道爲什麼它會嘗試讀取第二個備用網址的默認值。它適用於所有其他值。 – learningMyWayThru