tornado.web — RequestHandler and Application classes
这儿给出了个最简单的例子 “hellow world”
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
if __name__ == "__main__":
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
从多线程的角度来说 RequestHandler 方法是不安全的,特别的对于方法write(),finish(),和flush()必须通过主线程调用。如果你用多线程调用在这些方法(write ,finish , flush) ,那么你就应该再完成请求前调用方法IOLoop.add_callback将调用转接给主线程。
RequestHandler
1.1 Request handlers
class tornado.web.RequestHandler(application, request, **kwargs)
request 可以是 get() 或post()处理函数,如果你想让子类支持其他的标准请求 GET/HEAD/POST 等。你可以在子类中覆盖这些方法。
比如
class dealMethod (tornado.web.RequestHandler)
def get():
……..
def head():
……..
1.2 RequestHandler.initialize()
这个官方文档的解释不好翻译,不过举了例子大家一看就明白,
这个方法的大概作用是构造些个变量,给这RequestHandler的子类使用。这些变量以字典的方式通过url spec的第三个参数传递:
class ProfileHandler(RequestHandler):
def initialize(self, database):
self.database = database
def get(self, username):
…
我们定义了一个子类,传递参数database
在应用中加载子类时通过如下方式传递database这个参数
app = Application([
(r’/user/(.*)’, ProfileHandler, dict(database=database)),
])
1.3
RequestHandler.prepare()
RequestHandler.on_finish()
RequestHandler.get(*args, **kwargs)
RequestHandler.post(*args, **kwargs)
RequestHandler.put(*args, **kwargs)
RequestHandler.delete(*args, **kwargs)
RequestHandler.head(*args, **kwargs)
RequestHandler.options(*args, **kwargs)
1.4 input
1.4.1 RequestHandler.get_argument(name,default=[],strip = True)
返回所给name变量所对应值的unicode编码,如果所给的变量不存在并且没有给变量的默认值,那么会抛出MissingArgumentError,如果所给的变量超过了一个那么会返回最后一个所对应的变量。
1.4.2RequestHandler.get_arguments(name,strip = True)
返回所给变量对应值的列表,如果不存在返回空列表。
RequestHandler.get_query_argument(name, default=[], strip=True)
1.4.3这个函数跟get_argument 是一样的,只不过在版本3.2中才出现。
1.4.4RequestHandler.path_args
RequestHandler.path_kwargs
The path_args and path_kwargs attributes contain the positional and keyword arguments that are passed
to the HTTP verb methods. These attributes are set before those methods are called, so the values are available
during prepare.
1.5 Output
1.5.1
RequestHandler.set_status(status_code, reason=None)
RequestHandler.set_header(name, value)
RequestHandler.add_header(name, value)
RequestHandler.clear_header(name)
RequestHandler.set_default_headers()
1.5.2
RequestHandler.write(chunk)
将所给的内容作为输出。并通过flush 方法写在网页上。如果所给的内容是一个字典,那么将它看成Json格式。
RequestHandler.flush(include_footers=False, callback=None)
RequestHandler.finish(chunk=None)
RequestHandler.render(template_name, **kwargs)
渲染模板,并为模板传递参数。
RequestHandler.redirect(url, permanent=False, status=None)
如果我们给出了status变量的值,那么这个值将会做为http状态码。
否则的华我们见会返回http状态码301或302,这个选择取决于argument变量,默认情况下返回302.
1.6 Cookies
RequestHandler.cookies
RequestHandler.get_cookie(name, default=None)
RequestHandler.set_cookie(name, value, domain=None,expires=None,path=’/’,expires_days=None, **kwargs)