### 請求處理程序和請求參數
Tornado 的 Web 程序會將 URL 或者 URL 范式映射到 `tornado.web.RequestHandler` 的子類上去。在其子類中定義了 `get()` 或 `post()` 方法,用以處理不同的 HTTP 請求。
下面的代碼將 URL 根目錄 `/` 映射到 `MainHandler`,還將一個 URL 范式 `/story/([0-9]+)` 映射到 `StoryHandler`。正則表達式匹配的分組會作為參數引入 的相應方法中:
```
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("You requested the main page")
class StoryHandler(tornado.web.RequestHandler):
def get(self, story_id):
self.write("You requested the story " + story_id)
application = tornado.web.Application([
(r"/", MainHandler),
(r"/story/([0-9]+)", StoryHandler),
])
```
你可以使用 `get_argument()` 方法來獲取查詢字符串參數,以及解析 `POST` 的內容:
```
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('<html><body><form action="/" method="post">'
'<input type="text" name="message">'
'<input type="submit" value="Submit">'
'</form></body></html>')
def post(self):
self.set_header("Content-Type", "text/plain")
self.write("You wrote " + self.get_argument("message"))
```
上傳的文件可以通過 `self.request.files` 訪問到,該對象將名稱(HTML元素 `<input type="file">`的 name 屬性)對應到一個文件列表。每一個文件都以字典的形式 存在,其格式為 `{"filename":..., "content_type":..., "body":...}`。
如果你想要返回一個錯誤信息給客戶端,例如“403 unauthorized”,只需要拋出一個 `tornado.web.HTTPError` 異常:
```
if not self.user_is_logged_in():
raise tornado.web.HTTPError(403)
```
請求處理程序可以通過 `self.request` 訪問到代表當前請求的對象。該 `HTTPRequest` 對象包含了一些有用的屬性,包括:
* `arguments` - 所有的 `GET` 或 `POST` 的參數
* `files` - 所有通過 `multipart/form-data` POST 請求上傳的文件
* `path` - 請求的路徑( `?` 之前的所有內容)
* `headers` - 請求的開頭信息
你可以通過查看源代碼 `httpserver` 模組中 `HTTPRequest` 的定義,從而了解到它的 所有屬性。