2014-02-20 68 views
0

我有這樣定義AA路線:如何確定webapp2是否調用了你的函數,或者它是否是Python中的另一種方法?

webapp2.Route(r'/test/<var1>', handler="handlers.Test.test", methods="GET") 

的處理程序是這樣的:

def test(self, var1=None): 

,當我把它從一個URL,例如(案例A):

http://localhost:8080/test/helloworld 

我收到變量

var1=helloworld 

這很酷。現在讓我們說的不是從URL調用它,我反而想從另一個函數ALA(b)情況下調用它:

def calltest(self): 
    self.test(helloworld) 

我怎麼能確定的情況下,一個它正在從webapp2的路線,並在情況下叫BI可以告訴它正在從應用程序本身的另一個函數調用它?

爲什麼在這種情況下我想返回JSON,因爲瀏覽器不會說Python並且在情況B中我想返回一個對象,因爲調用函數本身就是Python,因此它可以理解返回類型。

作爲一個可能的方面說明,這是我試圖獲得雙重使用相同的方法,這是有點像我想像端點試圖實現的東西,但它似乎很容易,以及如果我可以案例返回基於調用者。

謝謝!

肖恩

+0

只需添加一個包裝handlers.Test.test'的'結果另一個函數和調用而不是你的路線。 –

+0

這與我想要完成的工作有些相反,有一堆方法可以完成同樣的事情,但其中一個方法就是針對不同的入口路徑,即webapp2而不是看起來有點愚蠢。隨着時間的推移,這是很多額外的方法,真的沒有太大的作用。 – Shaun

+0

[設置自定義調度程序](http://webapp-improved.appspot.com/guide/handlers.html#guide-handlers-returned-values)看起來很有希望 –

回答

0

我不熟悉webapp2的,但類似以下可能的工作:

def test(var1=None): 
    return { var1: var1 } 


def calltest(): 
    d = test() 
    print(d['var1']) 


def disp(router, request, response): 
    rv = router.default_dispatcher(request, response) 
    # turn dict into json and craft the response 
    return webapp2.Response(json.dumps(rv)) 
    # alternatively, you could make your handlers return objects with a .json() 
    # method and call that 


app = webapp2.WSGIApplication([ 
    webapp2.Route(r'/test/<var1>', handler=test, methods="GET"), 
]) 

app.router.set_dispatcher(disp) 
+0

但是,如果在從路由調用test()時調用calltest()與json的情況下,它如何返回一個python對象?對不起,如果我很密集,謝謝! – Shaun

+0

'disp'負責將'test'的結果轉換爲json,並自動從路由中調用。這也適用於多條路線,您只需確保'disp'可以處理您的處理程序的結果。 –

+0

所以在我剛剛調用calltest()的情況下,自定義調度程序將不會被調用,所以我可以在該實例中返回一個標準值或對象,它會正常工作?這很酷! – Shaun

相關問題