### 重寫 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` 中的設置)