如何在 Python Tornado 中检查请求是否完成?
How to check whether request is finished in Python Tornado?
我的 Tornado 应用程序中有两个 classes。
第一个 class 是 BaseRequestHandler
,它扩展了 tornado.web.RequestHandler
并覆盖了它的 prepare()
方法,用于 API 所有传入请求的密钥验证。
第二个是特定于路由的 class ChildRequestHandler
,它扩展了 BaseRequestHandler
.
ChildRequestHandler
也有 prepare()
方法进行一些参数验证,但在此之前它调用 BaseRequestHandler
.
的 prepare()
方法
现在,如果验证失败,classes 的 prepare()
方法会调用 tornado.web.RequestHandler
的 finish()
方法。
以下是 classes 的示例。
基础Class
class BaseRequestHandler(RequestHandler):
# Override Write Error method
def write_error(self, status_code, chunk):
self.set_status(status_code)
self.finish({'message': chunk})
# Prepare method to validate API Key
def prepare(self):
# Send Unauthorized error
if 'X-API-KEY' not in self.request.headers:
self.write_error(401, 'API Key {X-API-KEY} Required')
return None
# Set API Key from header
self.apikey = self.request.headers['X-API-KEY']
Child class
class ChildRequestHandler(BaseRequestHandler):
# Check for required parameters
def prepare(self):
# Call Prepare of base class
super(ChildRequestHandler, self).prepare()
username = self.get_query_argument('username', None)
if username is None:
self.write_error(400, 'Username {username} Required')
在 Base class 中验证失败时出现问题。然后它抛出运行时错误 finish() called twice
,因为 child class 的 prepare()
方法也会被执行,而不管 Base class.
的验证结果如何
这可以通过从 class 的 prepare()
方法返回布尔值来识别验证是否通过,然后相应地允许执行 [=58] 的 prepare()
方法来解决=] class.
但是有没有像self.finished()
这样的东西来识别请求是否已经完成?我查看了文档,找不到任何这样的方法。
没有 public finished()
方法(尽管没有理由不能添加)。我建议引发 tornado.web.HTTPError
的子类而不是直接调用 write_error
,这样 prepare()
不会在产生错误后正常 return。
我的 Tornado 应用程序中有两个 classes。
第一个 class 是 BaseRequestHandler
,它扩展了 tornado.web.RequestHandler
并覆盖了它的 prepare()
方法,用于 API 所有传入请求的密钥验证。
第二个是特定于路由的 class ChildRequestHandler
,它扩展了 BaseRequestHandler
.
ChildRequestHandler
也有 prepare()
方法进行一些参数验证,但在此之前它调用 BaseRequestHandler
.
prepare()
方法
现在,如果验证失败,classes 的 prepare()
方法会调用 tornado.web.RequestHandler
的 finish()
方法。
以下是 classes 的示例。
基础Class
class BaseRequestHandler(RequestHandler):
# Override Write Error method
def write_error(self, status_code, chunk):
self.set_status(status_code)
self.finish({'message': chunk})
# Prepare method to validate API Key
def prepare(self):
# Send Unauthorized error
if 'X-API-KEY' not in self.request.headers:
self.write_error(401, 'API Key {X-API-KEY} Required')
return None
# Set API Key from header
self.apikey = self.request.headers['X-API-KEY']
Child class
class ChildRequestHandler(BaseRequestHandler):
# Check for required parameters
def prepare(self):
# Call Prepare of base class
super(ChildRequestHandler, self).prepare()
username = self.get_query_argument('username', None)
if username is None:
self.write_error(400, 'Username {username} Required')
在 Base class 中验证失败时出现问题。然后它抛出运行时错误 finish() called twice
,因为 child class 的 prepare()
方法也会被执行,而不管 Base class.
这可以通过从 class 的 prepare()
方法返回布尔值来识别验证是否通过,然后相应地允许执行 [=58] 的 prepare()
方法来解决=] class.
但是有没有像self.finished()
这样的东西来识别请求是否已经完成?我查看了文档,找不到任何这样的方法。
没有 public finished()
方法(尽管没有理由不能添加)。我建议引发 tornado.web.HTTPError
的子类而不是直接调用 write_error
,这样 prepare()
不会在产生错误后正常 return。