2017-04-12 109 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