基础掌握点

路由解析

handlers = [
    ('/', MainHandler),
    ('/entry', EntryHandler),
    (r'/entry/([(^/)+])', EntryHandler1),      # 路径中的参数部分用小括号'()'标识     
    (r'/entry/([(^/)*])', EntryHandler2)       # 带默认值的参数路径
]
# 第四个路由对应的handler如下所示
class EntryHander2(tornado.web.RequestHandler):
    def get(self, slug='default'):
        pass

RequestHandler

配置和响应URL请求的核心类

  1. 接入点函数

    • RequestHandler.intialize()
      • 实现RequestHandler子类实例测初始化过程
    • RequestHandler.prepare()RequestHandler.on_finish()
      • prepare()——用于调用Action函数之前的初始化处理,可以做资源初始化操作。
      • on_finish()——用于请求处理结束后的一些清理工作,可做清理对象占用的内存或者关闭数据库连接等工作。
    • HTTP Action处理函数
  2. 输入捕获

    • RequestHandler.get_argument(name)RequestHander.get_arguments(name)
      获得单个值;获取多个值,返回多个值的列表。
      用来获取的是(1)URL查询字符串参数(2)Post提交参数的参数合集。
    • RequestHandler.get_cookie(name, default=None)
      根据Cookie名称获取Cookie值。
    • RequestHandler.request
      返回tornado.httputil.HTTPServerRequst对象实例,该实例常用的属性如下表:
      属性名 说明
      method 请求方法
      uri 客户端请求的uri的完整内容
      path uri路径名,即不包含查询字符串
      query uri中的查询字符串
      version 客户端发送请求时使用的HTTP版本
      headers 以字典方式表达的HTTP Headers
      body 以字符串方式表达的HTTP消息体
      remote_ip 客户端的IP地址
      protocol 请求协议,如HTTP、HTTPS
      host 请求消息体中的主机名
      arguments 客户端提交的所有参数
      files 以字典形式表达的客户端上传的文件,每个文件名对应一个HTTPFile
      cookies 客户端提交的Cookie字典
  3. 输出响应函数

    • RequestHandler.set_status(status_code, reason=None)

    • RequestHandler.set_header(name, value)

      class DetailHandler(tornado.web.RequestHandler):
          def get():
              self.set_header('NUMBER', 9)
              self.set_header('LANGUAGE', 'France')
              self.set_header('LANGUAGE', 'Chinese')   # 会覆盖上一个LANGUAGE的值
      
    • RequestHandler.add_handler(name, value)
      不会像上面产生覆盖的情形

    • RequestHandler.write(chunk)
      将给定的块作为HTTP Body发送给客户端。如果给定的块是个字典,则会将这个块以JSON的格式发送给客户端,同时将HTTP Header中的Content_Type设置成application/json

    • RequestHandler.finish(chunk=None)
      通知Tornado:Response的生成工作已经完成,调用finish()后,将向客户端发送HTTP Response。本方法适用于对RequestHandler的异步请求处理。

      注意:在同步或协程访问处理的函数中,无须调用finish()函数

    • RequestHandler.clear()
      清空所有在本次请求中之前写入的HeaderBody内容。

    • RequestHandler.set_cookie(name, value)

    • RequestHandler.clear_all_cookies(path='/', domain=None)
      清空本次请求中的所有Cookie


协程化

协程结合了同步处理和异步处理的优点,使代码清晰易懂,又能适应海量客户端的高并发请求。

 import tornado.web
 import tornado.httpclient
 
 class MainHandler(tornado.web.RequestHandler):
     @tornado.gen.coroutine    # 装饰处理函数
     def get(self):
         http = tornado.httpclient.AsynHTTPClient()
         # 使用yield关键字获取一步对象的处理结果
         response = yield http.fetch('http://www.baidu.com')
         self.write(response.body)

安全Cookie机制

Cookie是很多网站为了辨别用户身份而储存在用户本地终端的数据,比如保存Session信息。
如何保证其不备篡改是服务器端程序必须解决的问题,Tornado提供了为Cookie信息加密的机制,是的客户端无法随意解析和修改Cookie的键值。

import tornado.web
import tornado.ioloop

session_id = 1

class MainHandler(tornado.web.RequestHandler):
   def get(self):
       global session_id
       # get_cookie() -> get_secure_cookie()
       if not self.get_secure_cookie('session'):
           # set_cookie() -> set_secure_cookie()
           self.set_secure_cookie('session', str(session_id))
           session_id = session_id + 1
       else:
           pass

application = tornado.web.Application([
   (r'/', MainHandler),
], cookie_secret="SECRET_DONT_LEAK")   # 参数值是字符串,用于保存本网站Cookie加密时的密钥。

def main():
   application.listen(8888)
   tornado.ioloop.IOLoop.current().start()

if __name__ == '__main__':
   main()

你可能感兴趣的:(基础掌握点)