验证 Tornado 参数

Verify Tornado arguments

我有一个服务器可以接受 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.

之外,没有其他方法可以验证您是否只得到了您期望的参数

正如 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