tornado 01 路由输入与输出

Posted 许铖铖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tornado 01 路由输入与输出相关的知识,希望对你有一定的参考价值。

tornado 01 路由、输入与输出

一、安装tornado

[email protected]:~$ workon py3env #安装python3的虚拟环境
(py3env) [email protected]:~$ 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\naaa) #加了\n表示换行,但在网页里面显示不出来换行,原因是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()

 

以上是关于tornado 01 路由输入与输出的主要内容,如果未能解决你的问题,请参考以下文章

tornado多路由示例

Tornado-基于正则的路由和动态分页

片段(Java) | 机试题+算法思路+考点+代码解析 2023

tornado 03 请求与响应

Tornado web框架

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段