zoukankan      html  css  js  c++  java
  • tornado 01 路由、输入与输出

    tornado 01 路由、输入与输出

    一、安装tornado

    pyvip@Vip:~$ workon py3env #安装python3的虚拟环境
    (py3env) pyvip@Vip:~$ pip install tornado #安装tornado

    二、使用tornado

    #创建一个py文件,然后在虚拟机中打开文件即可
    
    #要让服务一直在运行当中,这就要用到tornado.ioloop模块
    #为了便于开发,就要用到tornado.web模块
    
    import tornado.ioloop #开启循环,让服务一直等待请求的到来
    import tornado.web    #web服务基本功能都封装在此模块中
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('hello')
    
    application = tornado.web.Application(
        [
            (r'/',MainHandler)
        ]
    )
    
    if __name__ == '__main__':
        application.listen(8080)
        tornado.ioloop.IOLoop.instance().start()

    三、路由

    #端口:为了提高效率,给专门的服务开专门的“门”
    
    #客户端(浏览器、windows) 访问服务器(虚拟机、linux),然后虚拟机的web服务和tornado服务返回数据给客户端,中间由virtualBox分隔开
    
    #客户端的端口8080与服务器的端口8080是不一样的,是通过virtualbox的端口转发实现的
    #客户端的8080被访问的时候,被virtualbox占用了,virtualbox把请求发送到服务器的8080端口去,然后再经过tornado服务处理
    
    #端口未被占用才能够监听,被占用了再监听会报错

      反馈

    #浏览器报错
    #无法访问:表示服务器没开或者炸了,你根本进不去
    #404:Not Found:表示禁止访问,你近视进去了,但是无法访问内容

      路由表

    application = tornado.web.Application(
        [  
            (r'/index',MainHandler) #r''表示去除转译
        ]
    )
    
    #客户端访问服务器可以看成是:客户端读取服务器资源的一个过程,路由表就指定了具体访问什么资源
    
    #路由表是访问服务器的入口
    
    #在工作中如果有新的需求,往往只需要在路由器中添加新的路由即可

      Handler

    class MainHandler(tornado.web.RequestHandler): 
        def get(self):
            self.write('hello') 
    
    #在这里指定请求的资源,比如输出hello;需要继承tornado.web.RequestHandler
    
    
    import tornado.ioloop
    import tornado.web
    
    class MainHandler(tornado.web.RequestHandler): #括号内继承父类
        def get(self):
            self.write('hello') #write能够将内容输出到浏览器当中
    
    application = tornado.web.Application(
        [                             #列表里面是一个个的元组,多个元组分别用逗号隔开,元组里面有路径由该路径下的内容组成
            (r'/index',MainHandler)  #/index表示路径,当访问的时候输入这个路径,返回的就是这个路径下的内容;如果访问的时候未找到该路径,就会返回404错误;这也就是路由的意义
        ]
    )
    
    if __name__ == '__main__':
        application.listen(8080) #监听8080端口
        tornado.ioloop.IOLoop.instance().start() #让这个tornado一直保持运行的状态

    四、启动tornado

    #怎样获取命令行参数  argv
    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    from tornado.options import define,options
    
    define('port',default=8080,help = 'run port',type=int) #设定port的默认值为8080,在linux里面可以指定port的值,类型为整型
    
    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('dage')
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler)
            ]
        )
    
    if __name__ == '__main__':
        tornado.options.parse_command_line()
        http_server = tornado.httpserver.HTTPServer(application)  #返回网站服务的实例,下面再用这个实例进行监听
        http_server.listen(options.port) #option.port就是define定义的port,把写死的端口变成一个可变的端口
        tornado.ioloop.IOLoop.instance().start()

    五、输入与输出

    #tornado如何与浏览器做交互
    
    #通过url,“路由”+ “?”+“变量名”+“变量”
    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    from tornado.options import define,options
    
    define('port',default=8080,help = 'run port',type=int)
    
    class IndexHandler(tornado.web.RequestHandler):
        def get(self):
            self.write('dage')
    
    class OutHandler(tornado.web.RequestHandler):
        def get(self):
            name = self.get_argument('name','no') #用get_agument来定义变量名和默认变量值,如果不设置默认变量的时候并且没有传入参数就会报错
            self.write('hello '+ name)# write 便是输出
            self.write('aaa
    aaa') #加了
    表示换行,但在网页里面显示不出来换行,原因是html里面的换行是br,所以这里面要换行需要用<br>;write可以解析html的CSS、JavaScript
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler),
                (r'/out',OutHandler)
            ]
        )
    
    if __name__ == '__main__':
        tornado.options.parse_command_line()
        http_server = tornado.httpserver.HTTPServer(application)
        http_server.listen(options.port)
        tornado.ioloop.IOLoop.instance().start()

     6、环境配置问题

    #代码同步
    Tools --->Deployment---->Configuration
  • 相关阅读:
    Class加载顺序
    Java中9大内置基本数据类型Class实例和数组的Class实例(转载)
    java配置日志总结
    Java格式化CST时间(mysql date类型)
    对称二叉树
    模拟--滑动窗口最大值
    group by两个条件
    P1996 约瑟夫问题
    C++命名空间、标准库(std,全局命名空间)
    java中引用对比C++指针
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8933002.html
Copyright © 2011-2022 走看看