01 输出

write

bytes类型

class IndexHandler(tornado.web.RequestHandler):

def get(self):

self.write(b'Tornado ')

字典类型

user = {

'name': 'budong',

'age': 18

}

  self.write(user)

当传字典进去 不解析了.因为遇到json类型数据将所有内容全部转成json字符串格式,导致换行符不解析.

unicode

self.write('Tornado ')

其他

li = [1, 2, 3, 4]

import json

li = json.dumps(li)

self.write(li)

print(repr(li))

li = json.loads(li)

print(repr(li))

接受对象

write可以接受 bytes、unicode字符和字典这个三个对象.

如果接受的是字典,会把字典转化成 JSON 字符串,因此write也可以接受 JSON 字符串

python2中首行加# -*-coding:UTF-8 -*- 说明编码格式,

flush

self.flush()

time.sleep(3)

self.write('Tornado ')

缓冲区

write 会先把内容放在缓冲区,正常情况下,当请求处理完成的时候会自动把缓冲区的内容输出到浏览器,但是可以调用 flush 方法,这样可以直接把缓冲区的内容输出到浏览器,不用等待请求处理完成 :

render:

返回 HTML

class TemHandler(tornado.web.RequestHandler):

def get(self):

self.render('01in_out.html')

通过  render  可以返回一个 html 文件

Application中的设置:

template_path='templates',

想要 Tornado 能够正确的找到 html 文件,需要在 Application 中指定文件的位置

redirect

跳转路由

class RecHandler(tornado.web.RequestHandler):

def get(self):

import time

time.sleep(3)

self.redirect(r'/tem')

通过  redirect 可以跳转到指定的路由

路由

(r'/rec', RecHandler),

finish

结束请求

self.finish()

self.write('finish')

finishi后面的代码会执行,但不会显示到浏览器.

当调用 finish 之后,请求处理完成,类似于函数中的 return (注意:请求当中不能出现return) ,其后不能再执行 write ,否则会报错.

02 获取请求信息

self.request

handler

class ReqHandler(tornado.web.RequestHandler):

def get(self):

self.write(self.request.remote_ip)

print(self.request.remote_ip)

print(self.request.full_url())

print(self.request.request_time())

继承类 tornado.web.RequestHandler 之后 ,可以直接调用 self.request 来获取客户端请求信息

method HTTP请求方法,例如 GET 或 POST
remote_ip 客户端的IP地址,返回值类型为字符串
full_url() 重新构建此请求的完整URL
request_time() 返回此请求执行所花费的时间
uri 请求的完整uri
path 路径部分的uri
query 查询部分的uri
version 请求中指定的HTTP版本,例如“HTTP / 1.1”

application设置debug=True,自动重启修改.

03 输入

添加标题

class GetHandler(tornado.web.RequestHandler):

def get(self):

name = self.get_argument('name', 'no')

self.write(name)

self.write(' ')

name = self.get_arguments('name')

self.write(' '.join(name))

   #get_arguments把传的所有参数全都传到列表里,get_argument只存最后一个.get_argument底层调用get_arguments,取最后一个值

获取表单数据.

def post(self, *args, **kwargs):

name = self.get_argument('name', 'no')

passwd = self.get_argument('password', 'none')

self.write('user: %s password: %s' % (name, passwd))

获取 URL 数据

get_argument可以获取 URL (查询字符串)中的参数

获取 body 数据

get_argument可以获取 body (请求体)中的数据,get_argument返回的值始终是unicode

get_query_argument #查询字符串中的参数

self.get_query_argument('name', 'query')

获取查询字符串中参数,对应的也有:get_query_arguments

get_body_argument #获取表单的body

self.get_body_argument('name', 'body')

获取 body 中的参数,对应的也有: get_body_arguments

04 url传参

查询字符串风格

class GetHandler(tornado.web.RequestHandler):

def get(self):

name = self.get_argument('name', 'no')

路由 (r'/get', GetHandler) URL http://127.0.0.1:8000/get?name=budong

REST风格

class UserHandler(tornado.web.RequestHandler):

def get(self, name, age):

self.write('name: %s age: %s' % (name, age))

class StudentHandler(tornado.web.RequestHandler):

def get(self, name, number):

self.write('name: %s number: %s' % (name, number))

路由

(r'/user/(.+)/([0-9]+)', UserHandler), #参数必须按照顺序

(r'/stu/(?P<number>[0-9]+)/(?P<name>.+)', StudentHandler), #?P加了标签

URL

http://127.0.0.1:8000/user/budong/18

http://127.0.0.1:8000/stu/20170001/budong

查询字符串

查询字符串通过在路由后面添加 ? 在加上参数名和参数值来传入参数

REST

通过 / 来分割每个参数,关键在于 get 方法定义

驼峰命名法

大驼峰:MainHandler 类

小驼峰:mainHandler

下划线:main_handler python规范

正式代码与导包空1行

类代码与正式代码之间空2行

最外面的函数和代码之间空2行

tornado框架基础02-输入和输出的更多相关文章

  1. tornado 01 路由、输入与输出

    tornado 01 路由.输入与输出 一.安装tornado pyvip@Vip:~$ workon py3env #安装python3的虚拟环境 (py3env) pyvip@Vip:~$ pip ...

  2. Python基础篇--输入与输出

    站长资讯平台:Python基础篇--输入与输出在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和输出输出输入END在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和 ...

  3. tornado框架基础01-路由简介

    tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...

  4. tornado框架基础10-websocket

    websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...

  5. tornado框架基础11-tornado异步

    01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...

  6. tornado框架基础09-cookie和session

    01 cookie 在上节,我们简单了解了登录过程,但是很明显,每次都需要登录,但是在平常逛网站的只需要登录一次,那么网站是如何记录登录信息的呢? 有没有什么办法可以让浏览器记住登录信息,下次再次打开 ...

  7. tornado框架基础03-请求与响应

    01 请求与响应 请求 浏览器在发送请求的时候,会发送具体的请求信息,由请求行,请求消息头,请求正文 请求消息头 向服务器传递附加信息 Accept: 浏览器可以接受的MIME类型. Accept-C ...

  8. Python学习--02输入和输出

    命令行输入 x = input("Please input x:") y = raw_input("Please input x:") 使用input和raw_ ...

  9. Python学习--02输入和输出、运算符

    命令行输入 x = input("Please input x:") y = raw_input("Please input x:") 使用input和raw_ ...

随机推荐

  1. 揭开Python科学计算的面纱

    春牛春杖.无限春风来海上.便与春工.染得桃红似肉红. 春幡春胜.一阵春风吹酒醒.不似天涯.卷起杨花似雪花. 标准的Python中用列表保存一组值,可以当做数组使用,但是由于其值类型任意,所以列表中保存 ...

  2. IOCP编程之基本原理

    在我的博客之前写了很多关于IOCP的“行云流水”似的看了让人发狂的文章,尤其是几篇关于IOCP加线程池文章,更是让一些功力不够深厚的初学IOCP者,有种吐血的感觉.为了让大家能够立刻提升内力修为,并且 ...

  3. 4-redis数据过期策略

    1 基本 redis也许只是用来存放临时数据.比如股市行情.游戏中一个持续一个月的活动等,都属于缓存数据,过了一段就没用了.如果没有过期策略,就会有大量垃圾数据在内存中堆积. 2 TTL time t ...

  4. 3-zookeeper应用场景

    1 概述 zk的核心体系是一个由业务注册进来的文件系统+对文件系统变化进行监听通知的监听机制. 假如在一个分布式系统中,有5台服务器,上面跑业务进程.在进程启动时,会去zk注册临时节点,并注册监听器. ...

  5. 水题 Codeforces Round #303 (Div. 2) A. Toy Cars

    题目传送门 /* 题意:5种情况对应对应第i或j辆车翻了没 水题:其实就看对角线的上半边就可以了,vis判断,可惜WA了一次 3: if both cars turned over during th ...

  6. 执行impdp时ORA-39213: Metadata processing is not available错误处理

    通过impdp命令将Oracle11g数据库的dmp文件导入至Oracle10g中时,报出如下错误: [oracle@dbsrv3 ~]$ impdp dhccms/dhccms DIRECTORY= ...

  7. 新建cordova应用,插件开发教程系列(总目录)

    以下几篇是连续的教程,代码也是连续的,包括如下章节: 新建cordova应用 https://www.cnblogs.com/cannel/p/11074359.html 使用cordova把h5应用 ...

  8. spark性能调优--jvm调优(转)

    一.问题切入 调用spark 程序的时候,在获取数据库连接的时候总是报  内存溢出 错误 (在ideal上运行的时候设置jvm参数 -Xms512m -Xmx1024m -XX:PermSize=51 ...

  9. HTTP协议 处理流程

    我们平时在浏览网页的时候都是使用浏览器,输入你要的网址后回车,就会显示出我们所想要的内容,看似这个简单的用户操作行为的背后,Web的工作原理是怎样的呢?到底隐藏了些什么呢? 对于传统的上网流程,系统它 ...

  10. 如何使用xftp工具在Windows与Linux之间传输文件

    如何使用xftp工具在Windows与Linux之间传输文件 整理者:vashon 声明:感谢开源社区 xftp工具是一款SFTP,FTP文件传输软件,可在Windows pc与Unix/Linux之 ...