從上一篇blog中瞭解到,對於tornado.web.RequestHandler對象,從HTTP請求中獲取信息的方式是:使用get_argument來獲得get或post請求的參數;寫HTTP響應的方式是:使用write方法。
下面將對RequestHandler進行更詳細的介紹。
HTTP方法
Tornado支持任何合法的HTTP請求(GET、POST、PUT、DELETE、HEAD、OPTIONS),只要在RequestHandler類中使用同名的方法即可。熟悉http協議的都知道,http請求報文中包含請求方法的名稱,因此很容易判斷出http請求交由哪一個方法進行處理。
HTTP狀態碼
Http響應報文中則需要返回狀態碼,而狀態碼可以直接通過RequestHandler類的set_status()方法顯式地設置。當然,正常情況下,tornado會自動設置HTTP狀態碼,如200表示成功,400表示錯誤的請求,405表示不被允許的請求等。
如果你想使用自己的方法代替默認的錯誤響應,可以通過重寫write_error來實現。demo如下:
# coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import tornado.ioloop
import tornado.web
import logging
from tornado.options import define, options
"""定義全局變量,這裏定義了一個端口"""
define("port", default=8888, help="run on the given port", type=int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("hello world")
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ',friendly user!')
def write_error(self, status_code, **kwargs):
self.write("Gosh darnit, user! You caused a %d error." % status_code)
if __name__ == "__main__":
logging.basicConfig(stream=sys.stdout, level=logging.INFO,
format='%(asctime)s %(levelno)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
)
logging.info("start server")
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler),
(r"/test", MainHandler)])
app.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
當嘗試發起一個post請求時:$ curl -d foo=bar http://localhost:8888/ 會輸出:Gosh darnit, user! You caused a 405 error.
如果不復寫write_error方法,則默認輸出: