tornado之HTTP方法

從上一篇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方法,則默認輸出:

405: Method Not Allowed405: Method Not Allowed。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章