Python 验证Tornado参数

Python 验证Tornado参数,python,tornado,Python,Tornado,我的服务器可以接受0、1或以下许多url参数: /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.we

我的服务器可以接受0、1或以下许多url参数:

/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参数?

您所拥有的是正确的。在Tornado中,除了在
self.request.arguments

上迭代之外,没有其他方法可以验证您只获得了预期的参数。在Tornado中,除了在
self.request.arguments

上进行迭代之外,没有其他方法可以验证您是否只获得了预期的参数。正如Ben所说,这是在Tornado中进行此操作的正确方法。也就是说,更好的测试地点是
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

正如本所说,这是在龙卷风中正确的方法。也就是说,更好的测试地点是
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