资讯专栏INFORMATION COLUMN

Tornado学习笔记(1)

ChanceWong / 3221人阅读

摘要:对参数类型进行检验,这里为当参数类型不合适是会抛出一个异常。将使用的第二个参数值作为默认值。而请求将从格式中取得指定的文本。这里需要正则表达式相关的知识,到了后面的学习中,必要时再去深入学习。到目前我们使用了,还支持任何合法的请求。

参考书籍《Introduction to Tornado》
1.1 Tornado是什么?
Tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够 强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。此外,它还拥有处理安全性、用户验证、社交网络以及与外部服务(如数据库和网站API) 进行异步交互的工具。
1.2 Hello Tornado
下面是一个全功能的Tornado应用的基础示例:

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

在程序的最顶部,我们需要导入一些Tornado模块,Tornado还包含一些其他模块,但是在这个例子中,我们最起码需要包含着四个模块。

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

这是一个有用的模块(tornado.options)来从命令行中读取设置。我们在这里使用这个模块指定我们的应用监听HTTP请求的端口。
如果一个与define语句中同名的的设置在命令行中被给出,那么他将成为全局options的一个属性。如果程序使用了--help,程序会打印出你在define函数中help指定的参数文本。如果没有指定值,可以用default=所指定的值来代替。type对参数类型进行检验,这里为int,当参数类型不合适是会抛出一个异常。

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

这个例子中只定义了一个GET方法,在以后的实际应用中我们可以用到GET POST 等其他的HTTP方法。
这里的get_argumentRequestHandler的内建方法,从一个查询字符串中获取greeting的值。Tornado将使用get_argument的第二个参数值作为默认值。
这里的write方法也是RequestHandler种的一个有用的方法,它将字符串形式的参数写入HTTP响应中。在这里是将greeting参数提供的值写入greeting中,并写到响应中。

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()

Demo:

import 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()

到这里 这个简单的例子便可以实现了。
可以在命令行中实现,也可以在IDE中实现(个人使用的是Pycharm)

接下来是一个稍微复杂一点的例子,对字符串进行操作的例子:

import textwrap
import 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 ReverseHandler(tornado.web.RequestHandler):    
    def get(self, input):        
        self.write(input[::-1])
class WrapHandler(tornado.web.RequestHandler):    
    def post(self):        
        text = self.get_argument("text")        
        width = self.get_argument("width", 40)        
        self.write(textwrap.fill(text, int(width)))
if __name__ == "__main__":    
    tornado.options.parse_command_line()    
    app = tornado.web.Application(        
        handlers=[            
            (r"/reverse/(w+)", ReverseHandler),            
            (r"/wrap", WrapHandler)        
            ]
        )    
    http_server = tornado.httpserver.HTTPServer(app)    
    http_server.listen(options.port)    
    tornado.ioloop.IOLoop.instance().start()

这里的GET请求会返回URL路径中指定的字符串的反转格式。如/reverse/tornado返回odanrot。
POST请求将从text格式中取得指定的文本。
这里需要正则表达式相关的知识,到了后面的学习中,必要时再去深入学习。
到目前我们使用了POST GET,Tornado还支持任何合法的HTTP请求。

HTTP状态码

404 Not Found #路径无法匹配时返回404
400 Bad Request #调用一个么有默认值的get_argument函数,并且没有找到给定名称的参数,返回400
405 Method Not Allowed #传入的请求使用了没有定义过的HTTP方法,返回405
500 Internal Server Error #当遇到任何不能让其退出的错误,也会返回500

PS:
看完第一章有一个基本的了解,但是关于web方面的知识还是比较少,譬如http方面。需要同时看《TCP/IP》
而且第一次写这种笔记的话,有些赘述,但是好在可以让自己更好的了解,有一个整理和总结对于学习而言亦有帮助。共勉

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37651.html

相关文章

  • tornado学习笔记1)HTTP请求及API测试

    摘要:首先是的请求接着是的请求在本次分享中,我们介绍了的请求,包括请求,并将介绍如何使用和来测试该本次分享到此结束,欢迎大家交流   Tornado是现在的主流 Web 服务器框架,它与大多数 Python 的框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,T...

    EddieChan 评论0 收藏0
  • Tornado学习笔记(2)

    摘要:而这里的方法则是告诉来读取模板文件,并将结果返回给浏览器。依旧可以使用,等条件控制语句,但是要记得以结尾。替换字符串中的字符为编码形式。模块模块是封装模板中包含的标记样式以及行为的可复用组件。 表单和模板 import os.path import tornado.httpserver import tornado.ioloop import tornado.options impo...

    tianyu 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • Tornado源码阅读笔记tornado.web.Application

    摘要:从的开始分析的源码很容易可以看出,通过继承类定义自己的处理类,来处理请求。类的对象来处理的路由将于处理类组成,关联起来。调用的来将和绑定在一起初始化一个的对象,由其来处理请求的路由,来利用建立的规则。 从tornado的 Hello,world 开始分析tornado的源码 pythonimport tornado.ioloop import tornado.web class M...

    Cympros 评论0 收藏0

发表评论

0条评论

ChanceWong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<