重写 RequestHandler 的方法函数
优质
小牛编辑
116浏览
2023-12-01
除了 get()
/post()
等以外,RequestHandler
中的一些别的方法函数,这都是 一些空函数,它们存在的目的是在必要时在子类中重新定义其内容。对于一个请求的处理 的代码调用次序如下:
- 程序为每一个请求创建一个 RequestHandler 对象
- 程序调用
initialize()
函数,这个函数的参数是Application
配置中的关键字 参数定义。(initialize
方法是 Tornado 1.1 中新添加的,旧版本中你需要 重写__init__
以达到同样的目的)initialize
方法一般只是把传入的参数存 到成员变量中,而不会产生一些输出或者调用像send_error
之类的方法。 - 程序调用
prepare()
。无论使用了哪种 HTTP 方法,prepare
都会被调用到,因此 这个方法通常会被定义在一个基类中,然后在子类中重用。prepare可以产生输出 信息。如果它调用了
finish(或
send_error` 等函数),那么整个处理流程 就此结束。 - 程序调用某个 HTTP 方法:例如
get()
、post()
、put()
等。如果 URL 的正则表达式模式中有分组匹配,那么相关匹配会作为参数传入方法。
下面是一个示范 initialize()
方法的例子:
class ProfileHandler(RequestHandler):
def initialize(self, database):
self.database = database
def get(self, username):
...
app = Application([
(r'/user/(.*)', ProfileHandler, dict(database=database)),
])
其它设计用来被复写的方法有:
get_error_html(self, status_code, exception=None, **kwargs)
- 以字符串的形式 返回 HTML,以供错误页面使用。get_current_user(self)
- 查看下面的用户认证一节get_user_locale(self)
- 返回locale
对象,以供当前用户使用。get_login_url(self)
- 返回登录网址,以供@authenticated
装饰器使用(默认位置 在Application
设置中)get_template_path(self)
- 返回模板文件的路径(默认是Application
中的设置)