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. Spring Security 使用Ajax登陆无法跳转页面解决方法

    使用Security的朋友都知道,使用Security后,不再需要我们自己过多的(还需要写少量代码)写登陆的逻辑,只需要自己在html的登陆表单上面定义好输入框name为:username和passw ...

  2. TensorFlow图像预处理完整样例

    参考书 <TensorFlow:实战Google深度学习框架>(第2版) 以下TensorFlow程序完成了从图像片段截取,到图像大小调整再到图像翻转及色彩调整的整个图像预处理过程. #! ...

  3. UOJ #35 后缀排序 哈希做法

    题面 http://uoj.ac/problem/35 题解 后缀数组当然可以 这里用哈希做 首先排序的问题在哪里 在于比较两个后缀的复杂度是O(length)的 但是我们可以通过找LCP来优化比较 ...

  4. [WOJ1318]和最大

    题目链接: WOJ1318 题目分析: 首先我们要知道当这是一个线性的序列的时候应该怎么做:最大子序和 这里是线性的,就把数组复制两遍即可 好像有些细节要处理(也可能是我代码写丑了),具体的都在代码里 ...

  5. Stars in Your Window POJ - 2482

    错误记录: 题目说输入在int范围内,但是运算过程中可能超int:后来开了很多longlong就过了 #include<cstdio> #include<algorithm> ...

  6. 在sz

    在大城市,sz, 每天骑单车去公交车站. 每天用高德地图 坐快线巴士 车上下班要3个小时. 用guomei 的回收管家 回收 旧空调. 我在kfc 看书 在班车上睡觉/眯眼 在办公室睡觉,看书,工作 ...

  7. PowerShell~文件操作和对象遍历

    ps提供了丰富的文件操作,如建立,删除,改名,移动,复制,文件夹建立,显示文件列表,同时对数组对象的遍历也很方便,如果在使用PS脚本时,希望现时传入参数,可以把参数声明为param,当然需要把它写在文 ...

  8. nginx缓存配置及开启gzip压缩

    阅读目录 一:nginx缓存配置 二:nginx开启gzip 回到顶部 一:nginx缓存配置 在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来 ...

  9. android动画之通过子线程来实现动画

    android动画之通过子线程来实现动画 使用android动画机制,往往是相对于原始位置来进行参照. 这里通过子线程修改物体位置实现动画. 布局文件: <RelativeLayout xmln ...

  10. iOS html格式解析

    使用TFHpple解析html https://github.com/topfunky/hpple 前期准备工作 引入静态库文件 添加库文件的 header search paths(注意,必须选中 ...