tornado.Application

一直想看tornado源码,今天看了Application类,Application的主要作用是接收来自httpserver的httprequest,然后根据httprequest中的host和path来寻找匹配的RequestHandler。

首先Application的构造函数有很多参数

handlers --- 一大堆匹配规则(正则表达式)和requesthandler的元组。

default_host --- 默认主机,如果找不到对应host的handler,则将页面跳转到http://{{default_host}}/页面(只是个猜测,我没有测试过)。

transforms --- 这个不知道是干嘛的。

ui_modules --- 指定当前application对象的ui模块,可以传模块,list和UIModule

ui_method --- 制定当前application的ui_method对象,同样可以传module, list和func。(ui_method就是那些在template中定义的方法)

static_path --- 静态文件地址

static_url_prefix --- 静态文件请求的url前缀,默认是/static/

static_handler_class --- 静态文件对应的处理类型,默认是tornado自带的StaticFileHandler,可以自己写。

static_handler_args --- 静态文件处理类型的参数

listen(self, port, address="", **kwargs) 方法创建一个HTTPServer实例,然后调用这个实例的listen()方法。注释中特别说明,如果是多线程的用法不能用该函数,需要显示调用HTTPServer或TCPServer自己的方法。

add_handlers(self, host_pattern, host_handlers)方法的作用是往self.handler中添加handler。这里需要注意如果handler匹配的url中有通配符,那么这个handler的优先级就会下降(排到了后面),如果添加相同的正则表达式会tornado会报异常。

add_transform(self, transform_class)这个函数是往self.transforms增加transform_class,但是transforms到底用来干什么我还不知道。

_load_ui_methods(self, methods)往self.ui_methods中添加方法

_load_ui_modules(self, modules)与_load_ui_method的功能是一样的。

reverse_url(self, name, *args)这个方法不知道是用来干嘛的。

log_request(self, handler)这个方法是吧请求写进日志,http状态小于400的都是属于正常状态,大于等于400小于500的都属于警告状态,除了上面的状态之外的都是错误状态。

_get_host_handlers(self, request)这个方法会根据request的host寻找属于这个的handlers,

__call__(self, request)方法使application实例对象变成可调用,它会调用_get_host_handlers(),将获取到的handlers再根据path来确定具体要使用的handler。它做了一些处理,比如如果没有找到对应host的handlers,那么直接跳转到默认host下面。如果没有找到匹配的Handler那么跳转到默认页面或者抛出404异常。另外它还会根据配置决定是否cache编译好的template文件,是否cache静态文件。

另外我还从代码中发现,如果是debug模式,默认会开启autoreload和serve_traceback功能,关闭compiled_template_cache和static_hash_cache功能,你可以通过在Application的__init__()函数中开启他们。

python 中 setdefault()方法还是很有用的,如果字典中没有这个值,那么就添加并赋值,如果有就忽略本次操作。

>>> a = {"name": "eleven"}
>>> print a
{‘name‘: ‘eleven‘}
>>> a.setdefault("name", "yumi")
‘eleven‘
>>> a.setdefault("age", 23)
23
>>> print a
{‘age‘: 23, ‘name‘: ‘eleven‘}

dict中get()方法在不传第二个参数的情况下如果没有指定的键会返回None,不会报错,我之前还一直指定第二个参数为None。

>>> b = {}
>>> print repr(b.get("name"))
None

python中or操作就相当于是C中的三目运算符?:

>>> 1 or []
1
>>> 0 or []
[]
>>> 1 if 1 else []
1
>>> 0 if 0 else []
[]

就这样吧,晚上再写点Baade项目的东西,本来昨天Baade是要上线的。

下个月跟小伙伴参加淘宝的黑客马拉松,要给力呀。

tornado.Application

时间: 2024-08-29 03:47:55

tornado.Application的相关文章

tornado web.py Application类源码剖析

[课程]web2.0程序设计[作业要求]研究 application 对象源代码.说明 Application 对象实例化时,给出“debug=True”参数,代码动态自动编译的原理.[参考文档]Application 类源代码 tornado Application 官方文档 debug模式和自动重新加载 tornado.web提供了一个简单的Web框架的异步功能.一个请求处理程序的集合就组成了一个web application. 1.分析application类的源码我们知道,applica

BAE tornado部署

python-web, python-worker选择 如果用于web访问,选择python-web. 其他,可选python-worker. 构建tornado的framework 创建requirements.txt 文件,将 tornado==4.2 添加到文件中(否则,会出现import错误). 创建tornado application. import tornado.wsgi import tornado.web class MainHandler(tornado.web.Reque

tornado源码分析-Application

tornado.web包含web框架的大部分主要功能,Application是其中一个重要的类 Application类的作用是实现 URI 转发,将 Application 的实例传递给 httpserver ,当监听到请求时,把服务器传回来的请求进行转发,通过调用 __call__ ,处理请求. Application源码: class Application(httputil.HTTPServerConnectionDelegate): """A collection

tornado框架源码分析---Application类之debug参数

先贴上Application这个类的源码. class Application(httputil.HTTPServerConnectionDelegate): """A collection of request handlers that make up a web application. Instances of this class are callable and can be passed directly to HTTPServer to serve the a

tornado.web.Application类配置及使用

Application configuration classtornado.web.Application(handlers=None, default_host='', transforms=None, **settings)[source] A collection of request handlers that make up a web application. Instances of this class are callable and can be passed direct

Tornado 高并发源码分析之三--- Application 对象

Application 对象主要工作: 服务器启动时: 1.在新建一个app的时候,根据设置好的 URL 和回调函数 Handler 封装成URLSpec 对象 服务器运行时: 2.在请求到来,将 HTTPServer 封装好的HTTPRequest 传入_RequestDispatcher对象,_RequestDispatcher对象根据传入的 HTTPRequest 使用URLSpec解析匹 match 正则匹配找到对应的 RequestHandler ,执行它的 _execute 方法 A

微信小程序连接Tornado

自己搭建Tornado 监听8000端口, 提供给小程序访问的地址为http://127.0.0.1:8000/index #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): print('GET方式请求成功') self.write("123"

Tornado Web 框架

一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关有用工具及优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以

Python框架之Tornado(二)请求阶段

概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestHandler,从而让XXRequestHandler来处理指定url发送的请求):第二步,创建服务器socket对象并添加到epoll中:第三步,创建无线循环去监听epoll. 2.在