tornado_输入输出

输出

在tornado里面如果要在浏览器输出内容,那么我们就需要用到write方法。
它可接收的类型有三种:unicode字符串,dict字典与bytes字节
除此之外我们还可以直接把json字符串写到浏览器当中

self.write()
把传入的参数写入到浏览器

self.flush()
执行flush时会把已经write的内容先刷新到浏览器

self.finish()
结束操作,后面的内容会被执行但是不会被显示

self.render()
传入一个页面,会返回页面内容

self.redirect()
传入一个路由,实现路由的跳转

import json

class MainHandler(tornado.web.RequestHandler):
    def  get(self):
        self.write('hello')  # 字符串
        self.write(<br />)
        self.write(b'hello')  # bytes

# 当write传输字典的时候,整个字符串都按照json字符串处理,有些格式并不会被浏览器解析(例如<br />)
# 此时应该先调用flush方法,之后再把字典写入
        self.flush()
        di = {
            'name': 'xiaoming'
        }
        self.write(di)  

        li = ['a', 'b']
        self.write(json.dumps(li))  # json字符串

        # flush
        self.flush()  # 刷新
        self.finish()  # 结束
        self.render('in_out.html')  # 可以返回一个HTML页面
        self.redirect('/')  # 路由跳转

获取请求信息

当我们开启tornado服务时,如果想知道是谁在访问我们,可以调用self.request来查看请求信息

method HTTP请求方法,例如 GET 或 POST
remote_ip 客户端的IP地址,返回值类型为字符串
full_url() 重新构建此请求的完整UR
request_time() 返回此请求执行所花费的时间
uri 请求的完整uri
path 路径部分的uri
query 查询部分的uri
version 请求中指定的HTTP版本,例如"HTTP /1.1"
self.request  # 获取一个请求对象
self.request.remote_ip  # 获取这个对象里面的ip属性

输入

self.get_argument('name', '')
获取请求参数数据,第一个参数为参数名,第二个参数指定默认值。相同参数名只能获取最后一个参数

self.get_arguments('name')
获取请求参数数据,以列表的形式存储。可获取多个相同参数名的值

self.get_query_argument()
self.get_query_arguments()
获取get请求里面url传参的数据

self.get_body_argument()
self.get_body_arguments()
获取post请求里面body的数据

class MainHandler(tornado.web.RequestHandler):
    def get(self):  # 获取URL数据
        name = self.get_argument('name', 'no')
        self.write(name)
        self.write('<br />')
        name = self.get_arguments('name')
        self.write('<br />'.join(name))

    def post(self):  # 获取body数据
        name = self.get_argument('name', 'no')
        password = self.get_argument('password', 'none')
        self.write('user: %s <br /> password: %s' % (name, password))

class IndexHandler(tornado.web.RequestHandler):
    def get(self):  # 获取URL数据
        name = self.get_query_argument('name', '')
        self.write(name)
        self.write('<br />')
        name = self.get_query_arguments('name')
        self.write('<br />'.join(name))

    def post(self):  # 获取body数据
        name = self.get_body_argument('name', '')
        password = self.get_body_argument('password', '')
        self.write('user: %s <br /> password: %s' % (name, password))

URL传参


查询字符串风格

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        name = self.get_argument('name', '')
  • 路由
Application([
    (r'/', MainHandler),
])
  • URL

http://127.0.0.1:8000/?name=xiaoming


REST风格

class MainHandler(tornado.web.RequestHandler):
    def get(self, name, age):
        self.write('name: %s <br /> age: %s' % (name, age))
  • 路由
Application([
    (r'/(.+)/([0-9]+)', MainHandler),
    # (r'/(?P<name>.+)/(?P<age>[0-9]+)', MainHandler),
])
  • URL

http://127.0.0.1:8000/name/xiaoming

推荐阅读更多精彩内容