2017-04-12 77 views
0

我有一個服務器,可以接受0,1或多個以下網址參數:驗證龍捲風參數

/api/cases?id={id}&name={name}&owner={owner}&status={status} 

所以這些,除其他,是正確的:

/api/cases?owner=me 
/api/cases 
/api/cases?name=bob&status=waiting 

目前,我的代碼看起來像這樣

routes = [(r'/cases?([^/]+)', MyHandler)] 
tornado.web.Application.__init__(self, routes, settings={}) 

class MyHandler(APIHandler): 
    ACCEPTED_URL_ARGS = ["id", "name", "owner", "status"] 

    def get(self, i): 
     for key in self.request.arguments: 
      if key not in self.ACCEPTED_URL_ARGS: 
        # error 

有沒有更好的方法來檢查url參數?

回答

2

你有什麼是正確的。在Tornado中,沒有其他方法可以驗證您僅獲得您期望的參數,而不是遍歷self.request.arguments

1

正如本說的,這是在龍捲風中做到的正確方法。這就是說,你的測試更好的地方是prepare方法;另外,嚴格來說更「pythonic」的方法是使用組:

class MyHandler(APIHandler): 
    ACCEPTED_URL_ARGS = {"id", "name", "owner", "status"} 

    def prepare(self): 
     unwanted_args = self.ACCEPTED_URL_ARGS - set(self.request.arguments) 
     if unwanted_args: 
      # error