python tornado框架_python Tornado框架 入门:一

Tornado介绍

Tornado 是一个Python web框架和异步网络库 起初由 FriendFeed 开发. 通过使用非阻塞网络I/O, Tornado 可以支持上万级的连接,处理 长连接, WebSockets, 和其他 需要与每个用户保持长久连接的应用.

Tornado 大体上可以被分为4个主要的部分:

web框架 (包括创建web应用的 RequestHandler 类,还有很多其他支持的类).

HTTP的客户端和服务端实现 (HTTPServer and AsyncHTTPClient).

异步网络库 (IOLoop and IOStream), 为HTTP组件提供构建模块,也可以用来实现其他协议.

协程库 (tornado.gen) 允许异步代码写的更直接而不用链式回调的方式.

Tornado web 框架和HTTP server 一起为 WSGI 提供了一个全栈式的选择. 在WSGI容器 (WSGIAdapter) 中使用Tornado web框架或者使用Tornado HTTP server 作为一个其他WSGI框架(WSGIContainer)的容器,这样的组合方式都是有局限性的. 为了充分利用Tornado的特性,你需要一起使用Tornado的web框架和HTTP server.

安装

pip install tornado

Tornado web应用的结构

通常一个Tornado web应用包括一个或者多个 RequestHandler 子类, 一个可以将收到的请求路由到对应handler的 Application 对象,和 一个启动服务的 main() 函数.

Application 对象

Application 对象是负责全局配置的, 包括映射请求转发给处理程序的路由 表.

路由表是 URLSpec 对象(或元组)的列表, 其中每个都包含(至少)一个正则 表达式和一个处理类. 顺序问题; 第一个匹配的规则会被使用. 如果正则表达 式包含捕获组, 这些组会被作为 路径参数 传递给处理函数的HTTP方法. 如果一个字典作为 URLSpec 的第三个参数被传递, 它会作为 初始参数 传递给 RequestHandler.initialize. 最后 URLSpec 可能有一个名字 , 这将允许它被 RequestHandler.reverse_url 使用.

RequestHandler 子类

Tornado web 应用程序的大部分工作是在 RequestHandler 子类下完成的. 处理子类的主入口点是一个命名为处理HTTP方法的函数: get(), post(), 等等. 每个处理程序可以定义一个或者多个这种方法来处理不同 的HTTP动作. 如上所述, 这些方法将被匹配路由规则的捕获组对应的参数调用.

在处理程序中, 调用方法如 RequestHandler.render 或者 RequestHandler.write 产生一个响应. render() 通过名字加载一个 Template 并使用给定的参数渲染它. write() 被用于非模板基础的输 出; 它接受字符串, 字节, 和字典(字典会被编码成JSON).

在 RequestHandler 中的很多方法的设计是为了在子类中复写和在整个应用 中使用. 常用的方法是定义一个 BaseHandler 类, 复写一些方法例如 write_error 和 get_current_user 然后子类继承使用你自己的 BaseHandler 而不是 RequestHandler 在你所有具体的处理程序中.

hello world”案例:

import tornado.ioloop

import tornado.web

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write("Hello, world。你好世界!!!")

class Index(tornado.web.RequestHandler):

def get(self):

self.write("这是一个首页")

class Redirect(tornado.web.RequestHandler):

def get(self):

'''重定向'''

# self.redirect(r"/") # 重定向到根目录

self.redirect(r"http://baidu.com") # 重定向到百度

class Error(tornado.web.RequestHandler):

def get(self):

'''设置网页状态500'''

self.set_status(500) # 页面返回500状态

class Pic(tornado.web.RequestHandler):

def get(self):

'''图片'''

self.write('')

def make_app():

'''

tornado.web.Application([(网址1),(网址2)]) 根据路径修改网址内容

debug=True 报告异常信息

write_error(参数1:错误页,参数2:错误异常提示消息) 异常处理

set_status(状态信息) 设置响应状态信息

redirect() 重定向处理

get_current_user() 获取用户信息进行用户验证

异步处理:

方式一:装饰器

方式二:异步调用

'''

return tornado.web.Application([

(r"/", MainHandler),

(r"/index", Index),

(r"/redirect", Redirect),

(r"/error", Error),

(r"/pic", Pic),

],

debug=True) #'debug=True 作用:代码有更新时 自动重启

if __name__ == "__main__":

app = make_app()

app.listen(8888)

tornado.ioloop.IOLoop.current().start()

运行上面代码 访问如图地址

可以看见会根据Application里定义的路径调用路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值