tornado框架基础02-输入和输出

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行

猜你喜欢

转载自www.cnblogs.com/winfun/p/10972349.html