文章目录

  • Tornado的安装
  • Tornado基本使用
  • Tornado各种url写法
  • 配置settings & 获取get,post请求
  • Tornado渲染
  • Tornado多文件上传

Tornado的安装

1、pip3安装pip3 install tornado2、源码安装https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz

Tornado基本使用

import tornado.ioloop
import tornado.web#1、 处理访问/index/的get请求: http://127.0.0.1:8888/index/
class MainHandler(tornado.web.RequestHandler):def get(self):self.write("I am index!!")# self.redirect('http://www.baidu.com')# self.render('index.html',k1='v1')#2、 处理访问 /login/的post请求和get请求: http://127.0.0.1:8888/login/
class LoginHandler(tornado.web.RequestHandler):def get(self):self.write('login')def post(self,*args,**kwargs):self.write('login post')#3、 配置settings
settings = {'template_path': 'template',         # 配置html文件模板位置'static_path': 'static',             # 配置静态文件路径(图片等)'static_url_prefix': '/static/',     # 前端引入静态文件路径
}#4 路由系统
application = tornado.web.Application([(r"/index/", MainHandler),(r"/login/", LoginHandler),
],**settings)#5 启动这个tornado这个程序
if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()

Tornado各种url写法

  • 无正则匹配url (http://127.0.0.1:8000/index/?nid=1&pid=2)
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):nid = self.get_query_argument('nid')pid = self.get_query_argument('pid')self.write("Hello, world")# http://127.0.0.1:8000/index/?nid=1&pid=2
application = tornado.web.Application([(r"/index/", MainHandler),
])if __name__ == "__main__":application.listen(8000)tornado.ioloop.IOLoop.instance().start()
  • 基于(\d+)正则的url
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self,nid,pid):print(nid,pid)self.write("Hello, world")# http://127.0.0.1:8000/index/1/2/
application = tornado.web.Application([(r"/index/(\d+)/(\d+)/", MainHandler),        # 这种只能传数字# (r"/index/(\w+)/(\w+)/", MainHandler),        # 这种可以传数字、字母、下划线
])if __name__ == "__main__":application.listen(8000)tornado.ioloop.IOLoop.instance().start()
  • 基于正则分组(?P\d+),可以不考虑接收参数顺序 (推荐)
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self,nid,pid):print(nid,pid)self.write("Hello, world")# http://127.0.0.1:8000/index/1/2/
application = tornado.web.Application([(r"/index/(?P<nid>\d+)/(?P<pid>\d+)/", MainHandler),        # 这种只能传数字
])if __name__ == "__main__":application.listen(8000)tornado.ioloop.IOLoop.instance().start()

配置settings & 获取get,post请求

  • settings可配置参数
settings = {'template_path': 'template',        #配置html文件模板位置'static_path': 'static',             #配置静态文件路径(图片等)'static_url_prefix': '/static/',    #前端引入静态文件路径'ui_methods': mt,'ui_modules': md,'xsrf_cookies':True,'cookie_secret':'xxx','login_url':"/auth/login",'autoescape':None,'local':"zh_CN",'debug':True,
  • 获取get、post请求

app.py

import tornado.ioloop
import tornado.web#1、 处理访问/index/的get请求: http://127.0.0.1:9999/index
class MainHandler(tornado.web.RequestHandler):def get(self):self.write("I am index!!")# self.redirect('http://www.baidu.com')# self.render('index.html',k1='v1')#2、 处理访问 /login/的post请求和get请求: http://127.0.0.1:9999/login
class LoginHandler(tornado.web.RequestHandler):def get(self):#2.1 获取url中以get方式传递过来的数据: http://127.0.0.1:9999/login/?username=zhangsan# print(self.get_query_argument('username'))        # zhangsan# print(self.get_query_arguments('username'))       # ['zhangsan']# print( self.get_argument('username') )            # get和post两种请求传递的数据都能获取self.render('login.html')def post(self,*args,**kwargs):#2.2 获取请求体中以post传递的数据# print( self.get_body_argument('faver') )     # 仅能获取单选,多选仅能获取最后一个# print( self.get_body_arguments('faver') )    # ['1', '2', '3']  获取多选#2.3 get和post两种请求传递的数据都能获取# print( self.get_argument('username') )#2.4 设置和获取cookie# self.cookies# self.set_cookie()#2.5 设置和获取请求头# self._headers# self.get_header()self.write('login post')#3、 配置settings
settings = {'template_path': 'template',         # 配置html文件模板位置'static_path': 'static',             # 配置静态文件路径(图片等)'static_url_prefix': '/static/',     # 前端引入静态文件路径
}#4 路由系统
application = tornado.web.Application([(r"/index/", MainHandler),(r"/login/", LoginHandler),
],**settings)#5 启动这个tornado这个程序
if __name__ == "__main__":application.listen(9999)tornado.ioloop.IOLoop.instance().start()
  • /templates/login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/base.css">
</head>
<body><form method="POST" action="/login/"><input type="text" name="username"><h5 class="c1">多选</h5>男球:<input type="checkbox" name="faver" value="1" />足球:<input type="checkbox" name="faver" value="2" />皮球:<input type="checkbox" name="faver" value="3" /><input type="submit" value="提交"></form>
</body>
</html>
  • /templates/base.css
.c1{color: red;
}

Tornado渲染

  • for循环

app.py

import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.render("index.html", username='tom',list_info=[11, 22, 33],user_dic={'username':'zhangsan','age':77})application = tornado.web.Application([(r"/index", MainHandler),
])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h3>用户名:{{username}}</h3>{% for item in list_info %}<li>{{item}}</li>{% end %}<p></p>{% for item in user_dic %}<li>{{item}} : {{user_dic[item]}}</li>{% end %}
</body>
</html>
  • if、in、判断相等

app.py

import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.render("index.html", list_info=[11, 22, 33],username='tom')application = tornado.web.Application([(r"/index", MainHandler),
])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{% if 11 in list_info %}true{% else %}false{% end %}{% if username == "tom" %}my name is {{username}}{% else %}not tom{% end %}
</body>
</html>

Tornado多文件上传

app.py

import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.render('index.html')def post(self, *args, **kwargs):file_metas = self.request.files["fff"]for meta in file_metas:file_name = meta['filename']with open(file_name,'wb') as up:print('hahah')up.write(meta['body'])settings = {'template_path': 'template',
}application = tornado.web.Application([(r"/index", MainHandler),
], **settings)if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()

index.html

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><title>上传文件</title>
</head>
<body><form id="my_form" name="form" action="/index" method="POST"  enctype="multipart/form-data" ><input name="fff" id="my_file"  type="file" /><input type="submit" value="提交"  /></form>
</body>
</html>

Tornado基本使用相关推荐

  1. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  2. python中tornado的第一个例子

    python中tornado的第一个例子 1  先安装tornado pip install tornado 2 新建tor.py 记住不能建立 tornado.py 这样的名字  不然会报错 Imp ...

  3. tornado+nginx上传视频文件

    [http://arloz.me/tornado/2014/06/27/uploadvideotornado.html] [NGINX REFRER: Nginx upload module] 由于t ...

  4. tornado源码分析

    tornado源码分析 本源码为tornado1.0版本 源码附带例子helloworld import tornado.httpserver import tornado.ioloop import ...

  5. Tornado自定义分布式session框架

    Tornado自定义分布式session框架 一.session框架处理请求执行的流程: 1.服务器端生成随机的cookie字符串 2.浏览器发送请求,服务器将cookie返回给浏览器. 3.服务器在 ...

  6. tornado 入门

    Overview FriendFeed是一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 weba ...

  7. python web项目案例教程_Python Web开发案例教程(慕课版)——使用Flask、Tornado、Django...

    第1章 Web开发基础1 1.1 Web概述 2 1.1.1 什么是Web 2 1.1.2 Web应用程序的工作原理 2 1.1.3 Web的发展历程 2 1.2 Web前端开发基础 4 1.2.1 ...

  8. sae python连接mysql_SAE Tornado 应用连接并使用 Mysql

    今天因为要提供几个开放的接口给我毕设相关的平台调用,所以又开始折腾之前在SAE上搭的Tornado应用. 之前记录过一个 如何在 SAE 上使用 Tornado,这次续上,关于在SAE里使用Torna ...

  9. tornado 09 cookie和session

    tornado 09 cookie和session 一.cookie #有什么办法能够让浏览器记住登录信息,下次再打开的时候可以自动登录?网站是如何记录登录信息的? class SetCookieHa ...

  10. python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理

    Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, ...

最新文章

  1. rocketmq同步发送超时时间_RocketMQ系列(一)基本概念
  2. c/c++反混淆方法
  3. linux网路编程之多进程并发服务器
  4. Struts2工作流程
  5. MATLAB R2021b for Mac(可视化数学分析软件)
  6. 阿里云成为云原生计算基金会金牌会员
  7. eNSP 华为模拟器更新说明
  8. FFT蝶形算法,IFFT
  9. NET Reflector 7.6.1.824安装及破解
  10. Oracle数据库之oracle update set select from 关联更新
  11. IP根域名服务器以及域名服务器对国家安全的真正意义。
  12. HYSBZ - 1086:王室联邦(树上分块?)
  13. Visual Studio的正确打开方式|9中种常见错误
  14. 激光雷达运动物体分割论文汇总(2021-2022)
  15. Login 2020:技术唤醒她力量进行时
  16. 金蝶KIS旗舰版V5.0安装报错问题总结
  17. 电脑发热严重:禁用独立显卡(Nvidia)/ TLP解决cpu占用率大
  18. statement和prepareStatement 的区别
  19. 空间域滤波与频率域滤波比较
  20. windows无法读取驱动器中的光盘(windows10)

热门文章

  1. 数据中心进行数字化转型的2019年
  2. 大型数据中心蓄电池规划与应用中的痛点及展望
  3. 机房承重标准及承重计算方法
  4. java web视频_超全面的JavaWeb视频教程
  5. 8分频verilog线_Verilog设计分频器(面试必看)
  6. nbu 恢复oracle数据库,关于使用nbu重定向恢复oracle数据库rman报错
  7. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding
  8. IDE之Eric:Python的IDE之eric的简介、安装、使用方法之详细攻略
  9. CentOS7修改默认运行级别
  10. js记录用户访问页面和停留时间