zoukankan      html  css  js  c++  java
  • tornado 02 输出、输入和URL传参

    tornado 02 输出、输入和URL传参

    一、输出

      write输出到页面

    #write可以接受的对象
    
    #write() 可以接受3种对象:bytes  Unicode字符(二进制字符) 字典
    #如果接收的是字典,会把字典转化为json字符串,因此write也可以接收json字符串
    #flush方法   缓冲区
    #write会先把内容放到缓冲区,正常情况下,当请求处理完成(也就是整段函数结束后)的时候自动把缓冲区的内容输出到浏览器
    #但是调用flush方法就可以直接把缓冲区的内容输出到浏览区,不用等待请求处理完成

    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('dage') #字符串
            self.write('<br>')
            self.write(b'xuchengcheng')  #二进制
            self.write('<br>')
            self.flush() #如果有flush,文件就会把内容立即冲刷到浏览器当中去
            import time #导入time模块
            time.sleep(3) #休息3秒钟后冲刷,后面的内容就会在3S后冲刷出来
            di = {
                'name':'xuchengcheng',
                'age':'27'
            }
            self.write(di) #字典,当打印字典时候不会解析上面的br,同时排版改变了
    
            import json
            li=['xucc',18] #列表原来是不能被解析
            li=json.dumps(li)  #通过json把li转变为json字符串,然后就可以被解析了
            self.write(li)

      输出一个html页面

    #template_path='templates' 
    #想要 Tornado 能够正确的找到 html 文件,需要在 Application 中指定文件的位置
    
    class TemHandler(tornado.web.RequestHandler):
        def get(self):
            self.render('lesson2.html') #通过  render  可以返回一个 html 文件
    class TemHandler(tornado.web.RequestHandler):
        def get(self):
            self.render('lesson2.html') #通过render可以返回一个同级目录文件夹下面的html文件
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler),
                (r'/tem',TemHandler)
            ],
            template_path = 'templates' #必须是在同级目录,前面是固定的,后面的是自己定义的文件夹
        )

      跳转路由

    class RecHandler(tornado.web.RequestHandler):
        def get(self):
            self.redirect('/index') #打开rec路由会自动跳转到index路由下面
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler),
                (r'/tem',TemHandler),
                (r'/rec',RecHandler),
            ],
            template_path = 'templates' 
        )

      finish

    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('dage') 
            self.write('<br>')
            self.write(b'xuchengcheng')  
            self.write('<br>')
            self.flush() 
            import time 
            time.sleep(3) #
            di = {
                'name':'xuchengcheng',
                'age':'27'
            }
            self.write(di) 
            self.finish()  #当调用 finish 之后,请求处理完成,类似于函数中的 return (注意:请求当中不能出现return) ,其后不能再执行 write ,否则会报错;但是后面的程序仍然是执行的,只是会报错
    
            import json
            li=['xucc',18] 
            li=json.dumps(li)  
            self.write(li)

    二、 获取请求信息

    class ReqHandler(tornado.web.RequestHandler):
        def get(self):
            self.write(self.request.remote_ip) #获取virtualbox(也就是访问人)的ip地址
            print(self.request) #可以获取信息
            print(self.request.remote_ip) #客户端的ip地址,返回值类型为字符串
            print(self.request.request_time()) #返回此请求执行所花费的时间
            print(self.request.full_url()) #重新构建此请求的完整URL
            print(self.request.uri) #请求的完整uri
            print(self.request.path) #路径部分的uri
            print(self.request.query) #查询部分的uri
            print(self.request.version) #请求中指定的HTTP版本,例如“HTTP/1.1”

      自动重启服务

    application = tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler),
                (r'/tem',TemHandler),
                (r'/rec',RecHandler),
                (r'/req', ReqHandler),
            ],
            template_path = 'templates', 
            debug=True  #自动重启服务(改完代码之后不用重新打开python文件),方便平时调试用的,在工作的时候禁用
        )

    三、输入

    class GetHandler(tornado.web.RequestHandler):
        def get(self): #获取url数据
            name = self.get_argument('name','no')
            self.write(name)
            print(name)
            name = self.get_arguments('name') #返回值是一个列表
            print(name)
            print(self.get_query_argument('name','no')) #获取地址栏的参数
    
        def post(self, *args, **kwargs): #获取body数据
            name = self.get_argument('name','no')
            password = self.get_argument('password','no')
            self.write(name)
            self.write(password)
            print(self.get_body_argument('name','no')) #获取form表单请求的内容,可以用get_arguments代替掉
    #任何数据都可以用get_argument来获取到

    四、URL传参

    #REST风格传参
    
    class SubjectHandler(tornado.web.RequestHandler):
        def get(self,name,age): #下面的正则按照这里的位置来定义的
            self.write('name:%s<br> age:%s'%(name,age))
    
    class UserHandler(tornado.web.RequestHandler):
        def get(self,age,name):
            self.write('name:%s<br> age:%s'%(name,age))
    
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler),
                (r'/tem',TemHandler),
                (r'/rec',RecHandler),
                (r'/req', ReqHandler),
                (r'/get', GetHandler),
                (r'/sub/(.+)/([0-9]+)', SubjectHandler), #用正则表达式(元字符+数字)
                (r'/user/(?P<name>.+)/(?P<age>[0-9]+)', UserHandler), #这样就不是按照位置来传参了,而是按照变量名来传参了
            ],
            template_path = 'templates',
            debug=True  
        )
    #查询字符串
    #查询字符串通过在路由后面添加?再加上参数名和参数值来传入参数 
    #例子tem?name=xuchengcheng&name=lalala 的形式来传参
    
    #REST
    #通过/来分割每个参数,关键在于get方法定义
    #还有就是tem?name=xuchengcheng&name=lalala 的形式来传参
  • 相关阅读:
    .net core实现前后端彻底分离
    在webapi中使用swagger
    在vs中启动项目,同时给项目传递参数
    在服务器中无法自宿主启动一个webapi项目,引出查看系统端口是否被占用
    display:none与visibility:hidden的区别是什么?
    px和em的区别
    如何垂直居中一个浮动元素?如何垂直居中一个<img>?
    rgba()和opacity的透明效果有什么不同?
    什么是外边距重叠?重叠的结果是什么?
    行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8948086.html
Copyright © 2011-2022 走看看