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