Tornado之输入与输出篇

Tornado之输入与输出

下面直接来看代码:

import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.options
from tornado.options import  define,options

tornado.options.define("port",default=8080,help="run port", type=int)

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("hello  hh")
        self.write("<br>")
        self.write(b"hello  vv")
        self.write("<br>")
        self.flush()     #不flush的话会等到最后一起保存
        import time      #引入time模块
        time.sleep(2)
        di={
            "name":"xps",
            "age":18
        }
        self.write(di)           # write只能接受二进制 ,字典,字符串
        self.finish()           #    后面的也运行,只是不会再输出到页面上
        import json
        li=['xxx',18]
        li = json.dumps(li)            #列表转换json成字符串
        self.write(li)

class TestIndexHandler(tornado.web.RequestHandler):
    def get(self):
        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'))    #专门获取查询字符串url中参数
        # print(self.get_body_argument('name','no'))    #专门获取body内容

    def post(self, *args, **kwargs):     #post请求
        name = self.get_argument("name","no")
        psd = self.get_argument("pas","no")
        self.write(name)
        self.write(psd)

class TemHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("in_out.html")   #返回一个html文件
        """
        <form method="post" action="/tem">
        <!--action里面是路由 .将数据提交到"/tem"-->
        <p>用户名<br><input type="text" name="name"></p>
        <p>密码<br><input type="password" name="psd"></p>
        <input type="submit">
    </form>

        """

class RecHandler(tornado.web.RequestHandler):
    def get(self):
        self.redirect("/index")   #跳转路由

class ReqHandler(tornado.web.RequestHandler):
    def get(self):
        self.write(self.request.remote_ip)      #返回ip地址
        print(self.request)
        print(self.request.request_time)     #返回请求时间

class SubHandler(tornado.web.RequestHandler):       ###按照位置传参
    def get(self,name,age):
        self.write("name: %s <br> age: %s"%(name,age))

class UseSubHandler(tornado.web.RequestHandler):               ###按照名字传参
    def get(self,name,age):
        self.write("name: %s <br> age: %s"%(name,age))

application = tornado.web.Application(
    handlers = [                          #handlers 固定的变量命名规则
        (r"/",MainHandler),
        (r"/index",TestIndexHandler),
        (r"/temp",TemHandler),
        (r"/rec",RecHandler),
        (r"/req",ReqHandler),
        (r"/sub/(.+)/([0-9]+)",SubHandler),      # URL传参,正则匹配      点号. -> 除自身之外
        (r"/use/(?P<name>.+)/(?P<age>[0-9]+)",UseSubHandler),          # 按照名字传入参数
    ],
    template_path = 'templates',     #模板路径(这里的路径根据自己的来)
    debug=True                 #代码保存上次之后,立即重启服务器,就不用手动重启了

)


if __name__ == "__main__":
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()
    启动服务器之后,我们可以输入use路由来试试:`127.0.0.1:8080/use/lihua/18`,此时参数直接按照名字传入。

**注:代码内容有来自潭州课堂**