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