python---tornado钩子预留解析
在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 = application
- self.request = request
- self._headers_written = False
- self._finished = False
- self._auto_finish = True
- self._transforms = None # will be set in _execute
- self._prepared_future = None
- self._headers = None # type: httputil.HTTPHeaders
- self.path_args = None
- self.path_kwargs = None
- self.ui = ObjectDict((n, self._ui_method(m)) for n, m in
- application.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)
尾部自动调用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 be
- supplied as keyword arguments to initialize().
- Example::
- class ProfileHandler(RequestHandler):
- def initialize(self, database):
- self.database = database
- def get(self, username):
- ...
- app = Application([
- (r'/user/(.*)', ProfileHandler, dict(database=database)),
- ])
- """
- pass
所以对于之前的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("请登录")
python---tornado钩子预留解析的更多相关文章
- Python+Tornado开发微信公众号
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程针对的是已掌握Pyt ...
- python tornado websocket 多聊天室(返回消息给部分连接者)
python tornado 构建多个聊天室, 多个聊天室之间相互独立, 实现服务器端将消息返回给相应的部分客户端! chatHome.py // 服务器端, 渲染主页 --> 聊天室建立web ...
- julia与python中的列表解析.jl
julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
- Python 迭代器和列表解析
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- Python.tornado.0
Tornado https://github.com/facebook/tornado http://www.tornadoweb.org/en/stable/guide/intro.html (A ...
- Python中的列表解析和生成器表达式
Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
随机推荐
- What’s for Beta
经过和Travis与Zhongqiu讨论,我们希望我们发布的Beta版本会支持如下内容: Naïve long-term plan UI (Useable) Naïve long-term plan ...
- Atcoder C - Vacation ( DP )
C - Vacation Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Taro' ...
- .NET 使用 RabbitMQ 图文简介
前言 最近项目要使用RabbitMQ,园里里面已经有很多优秀的文章,Rabbitmq官网也有.net实例.这里我尝试下图文并茂之形式记录下使用的过程. 安装 RabbitMQ是建立在erlang OT ...
- node基础 npm、module、exports、require
module 模块.包:可以认为是一个代码包,package,提供特定的功能(暴露给外界接口,让外界调用) exports 输出.导出:导出模块中的各种类型的变量,以及各种方法,导出之后,才可以被外界 ...
- PAT 甲级 1134 Vertex Cover
https://pintia.cn/problem-sets/994805342720868352/problems/994805346428633088 A vertex cover of a gr ...
- ubuntu查看本地ip
1.下载net-tools sudo apt-get install net-tools 2.终端输入命令 ifconfig
- PP学习笔记-业务基础
生产主数据.生产计划.生产订单与生产执行 生产模块主要子模块及功能:PP-BD 基本数据管理 PP-SFC车间订单管理 PP-MRP物料需求计划 PP-MPS主生产计划 PP-CRP能力计划 PP-I ...
- MidoNet 安装(Kilo RDO)(最老版)
一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ...
- loadrunner基础学习笔记四
在loadrunner中,通过将一系列操作标记为事务,可以将它们指定为要评测的操作. loadrunner收集关于事务执行时间长度的信息,并将结果显示在用不同单色标识的图和报告中. 可以这些信息了解应 ...
- Tomcat server.xml中Connector配置参数详解
Tomcat中Connector常用配置 Tomcat中server.xml有些配置信息是需要我们了解的,最起码知道如何进行简单的调试. <Connector port="8080&q ...