ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 重写 RequestHandler 的方法函数 除了 `get()`/`post()`等以外,`RequestHandler` 中的一些别的方法函数,这都是 一些空函数,它们存在的目的是在必要时在子类中重新定义其内容。对于一个请求的处理 的代码调用次序如下: 1. 程序为每一个请求创建一个 RequestHandler 对象 2. 程序调用 `initialize()` 函数,这个函数的参数是 `Application` 配置中的关键字 参数定义。(`initialize` 方法是 Tornado 1.1 中新添加的,旧版本中你需要 重写 `__init__` 以达到同样的目的) `initialize` 方法一般只是把传入的参数存 到成员变量中,而不会产生一些输出或者调用像 `send_error` 之类的方法。 3. 程序调用 `prepare()`。无论使用了哪种 HTTP 方法,`prepare` 都会被调用到,因此 这个方法通常会被定义在一个基类中,然后在子类中重用。prepare`可以产生输出 信息。如果它调用了`finish`(或`send_error` 等函数),那么整个处理流程 就此结束。 4. 程序调用某个 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)` - 查看下面的[用户认证](#user-authentication)一节 * `get_user_locale(self)` - 返回 `locale` 对象,以供当前用户使用。 * `get_login_url(self)` - 返回登录网址,以供 `@authenticated` 装饰器使用(默认位置 在 `Application` 设置中) * `get_template_path(self)` - 返回模板文件的路径(默认是 `Application` 中的设置)