在tornado.web.RequestHandler类中的初始构造方法中:

class RequestHandler(object):"""Base class for HTTP request handlers.
Subclasses must define at least one of the methods defined in the"Entry points" section below."""
    SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PATCH", "PUT","OPTIONS")_template_loaders = {}  # type: typing.Dict[str, template.BaseLoader]_template_loader_lock = threading.Lock()_remove_control_chars_regex = re.compile(r"[\x00-\x08\x0e-\x1f]")def __init__(self, application, request, **kwargs):super(RequestHandler, self).__init__()self.application = applicationself.request = requestself._headers_written = Falseself._finished = Falseself._auto_finish = Trueself._transforms = None  # will be set in _executeself._prepared_future = Noneself._headers = None  # type: httputil.HTTPHeadersself.path_args = Noneself.path_kwargs = Noneself.ui = ObjectDict((n, self._ui_method(m)) for n, m inapplication.ui_methods.items())# UIModules are available as both `modules` and `_tt_modules` in the# template namespace.  Historically only `modules` was available# but could be clobbered by user additions to the namespace.# The template {% module %} directive looks in `_tt_modules` to avoid# possible conflicts.self.ui["_tt_modules"] = _UIModuleNamespace(self,application.ui_modules)self.ui["modules"] = self.ui["_tt_modules"]self.clear()self.request.connection.set_close_callback(self.on_connection_close)self.initialize(**kwargs)

View Code

尾部自动调用tornado为用户预留的initialize方法(未实现,是由用户调用来实现)

    def initialize(self):"""Hook for subclass initialization. Called for each request.
A dictionary passed as the third argument of a url spec will besupplied as keyword arguments to initialize().Example::class ProfileHandler(RequestHandler):def initialize(self, database):self.database = databasedef get(self, username):...app = Application([(r'/user/(.*)', ProfileHandler, dict(database=database)),])"""
        pass

View Code

所以对于之前的session类的使用上可以用到钩子,就像php中的公共控制类中构造方法中调用某些函数,会在每个控制器执行时去执行这些函数,减少在代码中的复用。

前面session类的改进

class BaseRequestHandler(tornado.web.RequestHandler):#tornado预留钩子函数def initialize(self):self.session=Session(self)class IndexHandler(BaseRequestHandler):def get(self):if self.get_argument('u',None) in ['asd','zxc']:#在这里有个bug,当程序两次设置值时,逻辑相同,但是由于只发送了一次请求,获取了第一次的py_session#在相同逻辑代码处理下random_str=self.handler.get_cookie('py_session')#每次都是不正确的,都需要重新创建一个标识符#但是后面的刷新过程中由于修改了客户区的py_session,所以可以正常进行操作,但是第一次产生的py_session的依旧存在服务端self.session.set_value('is_login',True)self.session.set_value('name',self.get_argument('u'))#self.get_secure_cookie()#The decoded cookie value is returned as a byte string (unlike#`get_cookie`).else:self.write("请登录")

转载于:https://www.cnblogs.com/ssyfj/p/8529267.html

python---tornado钩子预留解析相关推荐

  1. linux安装微信商户证书,微信支付-证书安装+使用+CentOS+Python+Tornado

    本篇要讲的是: 如何在CentOS下通过Python+Tornado搭建的网站使用微信支付相关的接口证书的问题 官方文档:https://pay.weixin.qq.com/wiki/doc/api/ ...

  2. 阿里云大学考试python中级题目及解析-python中级

    阿里云大学考试python中级题目及解析 1.WEB开发中,下列选项中能够实现客户端重定向的设置是() A.响应头设置Location+状态码200 B.响应头设置Location+状态码302 C. ...

  3. Python+Tornado开发微信公众号

    本教程针对的是已掌握Python语言基本用法并且掌握其任一Web框架的用户. 本教程使用的Python版本为3.5.0, Web框架为Tornado, IDE开发工具为PyCharm,整个开发过程是在 ...

  4. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  5. python之XML文件解析

    python对XML的解析 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同. python有三种方法解析XML,分别是SAX,DOM,以及ElementT ...

  6. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  7. python 爬预警没解析前的

    python 爬预警没解析前的 posted on 2018-04-03 16:20 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.co ...

  8. python编程基础是什么-Python面向对象编程基础解析(一)

    1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...

  9. Python命令行参数解析模块getopt使用实例

    这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参考下 格式 getopt(args, options ...

最新文章

  1. uboot nand erase 的显示错误修复
  2. setTimeOut函数传参数
  3. 以下表示中 不能用作c语言常量的是0UL,C语言笔试卷.doc
  4. arthas用的好好的,写个lambda表达式就跪了?该咋解决?
  5. JS对数组对象按照某个字段进行排序
  6. 国产web端开源ui组件-后台前端ui界面组件库
  7. 数据库实验八SQL语句的综合使用
  8. Scott Page  斯科特佩奇《模型思维》读书笔记
  9. 在Openjdk 8 中如何合理使用容器 memory 资源
  10. h5调用指纹识别_Vue指纹识别验证 h5plus
  11. [c#]使用Fleck实现简单的WebSocket含兼容低版本IE
  12. 每个家庭将有一台计算机英语,2011年6月英语四级考试模拟试题及答案9
  13. Allegro等长走线设计遇到的一些问题
  14. 【奇奇怪怪小知识】系统盘(C盘)持续发出“救救我”信号(C盘仅剩不足10G,爆红), 操作过后直接腾出近20G
  15. 猜字母 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
  16. 《Essential Linux Device Drivers》中文版第1章
  17. genSIM 导入 txt 格式的词向量参数
  18. oTree学习教程(一)概念性概述
  19. 强制等待、显示等待和隐式等待
  20. zabbix-server-mysql安装_详解zabbix安装部署(Server端篇)

热门文章

  1. Excel-怎样实现行列转置
  2. 项目:部署LNMP动态网站
  3. asp开发中存储过程应用全接触 _asp技巧
  4. 手机内存解读以及android刷机原理
  5. android 自定义正方形 绕中心点旋转
  6. 再见了, VS Code!
  7. Flink or Spark?实时计算框架在K12场景的应用实践
  8. 最佳开发工具大全!前谷歌工程师两年打造“厂外生存指南”,登上GitHub热榜
  9. 迎接 2019:软件开发新趋势预测
  10. 理解分布式系统中的缓存架构(下)