tornado学习笔记(一)

hello.py

mport tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        greeting = self.get_argument(‘greeting‘, ‘hello‘)
        self.write(greeting + ‘, friendly user!‘)

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

这是tornado一个简单服务器的例子

define("port", default=8000, help="...", type = int)定义了服务器监听的默认端口

IndexHandler类用来处理请求,get_argument可以获取get或者post请求中的关键字参数,然后用write输出到页面

if __name__ == "__main__":里面的代码是实际上运行服务器的代码,parse_command_line函数解析命令行的输入,然后建立Application类型的应用,里面定义handlers,处理不同的url对应的处理类,用正则表达式进行匹配。通过这个app对象可以建立HTTPServer来监听端口,最后运行IOLoop来准备接受http请求

tornado的url正则默认包含行起始和结尾的,如"/"已经表示"^/$"

命令行执行python hello.py --port=8000可以制定端口运行服务器

终端使用curl来调试:$ curl http://localhost:8000/?greeting=Haroo

http status code

  • 404 : not found
  • 400 : bad request,如使用get_argument但没有给默认值,如果查找不到关键字就会返回400
  • 405 : method not allowed
  • 500 : internal server error
  • 200 : ok

当出现错误时,tornado会给客户端返回错误状态码和错误信息,如果要自己设置错误响应,可以重写RequestHandler类中的write_error函数

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        ...
    def write_error(self, status_code, **kwargs):
        self.write("damn it, user! you caused a %d error." % status_code
时间: 2024-11-05 18:51:53

tornado学习笔记(一)的相关文章

python框架之 Tornado 学习笔记(一)

tornado 一个简单的服务器的例子: 首先,我们需要安装 tornado ,安装比较简单: pip  install tornado 测试安装是否成功,可以打开python 终端,输入: import     tornado.httpserver 若无报错,则证明安装成功 接下来就可以写一个简单的服务器了,如下: import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web

Tornado 学习笔记 Tornado基础 1

这是根据官方文档学习后总结的笔记: Tornado基础 Tornado是一套web框架和异步网络功能库,使用非阻塞是IO,可支持数万个活动连接.支持长活跃连接,支持 long polling长连接,支持WebSockets. A web framework (including RequestHandler which is subclassed to create web applications, and various supporting classes). Client- and se

Tornado学习笔记(一)

最近开始用Tornado做开发了,究其原因,主要是Tornado基于Python,一来代码量少开发速度快,二来采用epoll方式,能够承载的并发量很高.在我的i5台式机上用ab测试,不连接数据库的情况下,单用get生成页面,大概平均的并发量在7900左右.这比php或者java能够承载并发量都高很多很多.三来Python代码可维护性相对来说比php好很多,语法结构清晰.四来,tornado的框架设计的很黄很暴力,以HTTP请求方式作为方法名称,通常情况下,用户写一个页面只需要有get和post两

Tornado学习笔记(三)

记录一些Tornado中的常用知识. 获取远端IP,直连tornado,用self.request.remote_ip,如果是走nginx反向代理方式,需要在nginx中的Server/Location配置如下                 proxy_pass http://data.xxx.com;                 #proxy_redirect off;                 proxy_set_header Host $host;               

Tornado 学习笔记3 tornado started

这个笔记是看Introduction.to.Tornado 一书时总结的. Tornado适合创建可灵活扩展的社区程序.实时的分析引擎,以及REST风格的API.由Bret Taylor等人为FriendFeed开发,后被Facebook收购. 多数的社区程序实时更新显示新消息,状态更改以及用户提示,需要客户端一直保持连接用来等待服务器的响应.使用线程模式的服务器如apache及其comet实现很容易因为达到线程池最大值,而无法接受新的请求. 相对于使用线程模式管理缓冲池的方式,Tornado使

tornado 学习笔记

import tornado.ioloop import tornado.web class MainHanlwe(tornado.web.RequestHandler): def get(self): login_user=self.get_secure_cookie('login_user',None) if login_user: self.write(login_user) else: self.redirect('/login') class LoginHanmder(tornado.

tornado学习笔记19 Tornado框架分析

19.1 Http服务器请求处理流程图   (1) 调用HTTPServer的bind方法,绑定Socket的监听端口号: (2) 调用HTTPServer的listen方法,初始化一个listen socket对象: (3) 调用add_hander方法,将初始化的listen socket对象添加至IOLoop池中,这时的socket就开始监听来自客户端的请求. (4) 客户端发送HTTP请求: (5) listen socket监听到客户端的请求,调用listen socket的accep

tornado学习笔记(四)

4 Databases 1 pymongo 2 simple word dictionary 3 Burts books read from database editing and adding books 4 Databases 1 pymongo pymongo是python用来连接MongoDB数据库的一个库,可以pip安装:pip install pymongo 命令行mongod运行mongodb服务器后,可以使用pymongo来进行连接 >>> import pymongo

tornado 学习笔记7 RequestHandler功能分析

       在第5部分讲到,构建一个tornado网站,必须包含一个或者多个handler,这些handler是RequestHandler的子类.每个请求都会被映射到handler中进行处理,处理后再将结果返回给客户端.所以,可以看到hanlder作为客户端请求跟业务服务逻辑间的桥梁,如果拿MVC的模式来类比的话,每个handler就相当于MVC中的Controller.        RequestHanlder作为所有hanlder的父类,我们看看他有哪些方法与接口,子类需要怎样继承?

tornado学习笔记(三)

3 Extending Templates 1 blocks and substitutions 2 autoescaping 3 UI modules basic module usage modules in depth embedding javascript and css 3 Extending Templates 1 blocks and substitutions 模板可以继承于基类模板,这样可以重复使用很多模块减少代码量 如在index.html中继承main.html,在ind