zoukankan      html  css  js  c++  java
  • tornado 03 请求与响应

    tornado 03 请求与响应

    一、请求与响应

      浏览器与服务器之间沟通的到底是什么信息

    #服务器在后台一直保持运行着
    #浏览器通过URL(路由、地址)发送请求
    #服务器接收请求了通过tornado处理结果,然后将结果发送给浏览器,最后页面显示

      请求信息

    #请求 
    #浏览器在发送请求的时候,会发送具体的请求信,由请求行、请求消息头和请求正文组成
    
    #请求行
    #请求行一般位于第一行,包含内容为:
    Method #一般为GRT或者POST
    Path-to-resourse #请求的资源的URI
    Http/Version-number #客户端使用的协议de的版本,有HTTP/1.0和HTTP/1.1
    
    #请求消息头
    #向浏览器传递附加消息
    Accept:#浏览器可以接受的MIME类型。
    Accept-Charset#浏览器支持的字符集,如gbk,utf-8
    Accept-Encoding#浏览器能够解码的数据压缩方式, 如:gzip
    Accept-language#所希望的语言
    Host#请求的主机和端口User-Agent:通知服务器,浏览器类型.
    Content-Length#表示请求消息正文的长度 
    Connection#表示是否需要持久连接(Keep-alive)
    Cookie #这是最重要的请求头信息之一(会话有关)
    
    #请求正文
    #请求具体内容,比如:URL中传入的参数,form表单里面的内容等等

      响应信息

    #响应信息
    #响应信息为服务器的处理结果。主要包含:响应行,响应消息头,响应正文
    
    #响应头
    Server# 通知客户端,服务器的类型
    Content-Encoding#响应正文的压缩编码方式。常用的是gzip
    Content-Length#通知客户端响应正文的数据大小
    Content-Type#通知客户端响应正文的MIME类型
    Content-Disposition#通知客户端,以下载的方式打开资源
    
    #响应行
    #响应行主要报错如下信息:
    Http/Version-number#服务器用的协议版本
    Statuscode:响应码。代表服务器处理的结果的一种表示,常用的响应码有:200:正常  302/307:重定向 304:服务器的资源没有被修改 404:请求的资源不存在 500:服务器报错了
    #message:响应码描述。例如200的描述为OK
    
    
    #响应正文
    #具体的响应内容,如html,JavaScript 等数据内容

     二、设置响应头

    #请求头不能修改,服务器是可以修改响应头的
    
    #如何改变响应头
     
    class MainHandler(tornado.web.RequestHandler): #修改
        def get(self):
            self.write('set_header')
            self.set_header('xuchengcheng','haoshuai') #改变对应的响应即可
            self.set_header('xuchengcheng','bushuai') #如果是修改相同的响应,以后修改的为准
    
    class AddHandler(tornado.web.RequestHandler): #添加
        def get(self):
            self.write('add_header')
            self.add_header('xiaozijian','xiong')
            self.add_header('xiaozijian','chou') #相同响应添加不会覆盖掉
            self.add_header('xiaozijian','liang')
    
    class ClearHandler(tornado.web.RequestHandler): #删除
        def get(self):
            self.write('clear_header')
            self.add_header('xiaozijian','xiong')
            self.add_header('xiaozijian','chou') #相同响应添加不会覆盖掉
            self.add_header('xiaozijian','liang')
            self.clear_header('xiaozijian') #会将所有的响应xiaozijian全部删除掉

    三、发送错误码

       发送错误码

    #服务器如何主动地给浏览器报错
    class SendHandler(tornado.web.RequestHandler): #发送错误码
        def get(self):
            self.write('send_error')
            self.flush() #将缓冲区的内容写在了浏览器上面,这样已经发送过信息并由处理结果了,然后下面的404就不能改了(无法修改响应头了)
            self.send_error(404) #调用send_error这个方法就可以主动地发送错误码

      修改报错样式

    class SendHandler(tornado.web.RequestHandler): #发送错误码
        def get(self):
            self.write('send_error')
            self.send_error(404) 
    
        def write_error(self, status_code, **kwargs): #调用了这个方法,改变页面上显示的效果
            self.write('status_code:%s'% status_code) #返回一个write;也可以返回一个网页,用render

      如何在没进入路由前发送错误码

    class NotHandler(tornado.web.RequestHandler): #发送错误码
        def get(self,*args,**kwargs):
            self.write('send_error')
            self.set_status(404,'error') #修改状态码
    
    application = tornado.web.Application(
            handlers=[
                (r'/index',MainHandler),
                (r'/add', AddHandler),
                (r'/clear', ClearHandler),
                (r'/send', SendHandler),
                (r'/(.*)', NotHandler), #在正则表达式下,上面的传参需要传入args和kwargs;同时这个任意报错需要放在最下面,当上面所有路由都找不到的时候就会匹配到这个路由,然后报送错误码;开发的时候建议不要写上去
            ],
            template_path = 'templates',
            debug=True
        )

    四、处理流程

      请求处理过程

    #tornado在接收到请求的之后,会做些什么
    class IndexHandler(tornado.web.RequestHandler): #Tornado 在接受到请求之后,后按照此顺序选择响应的方法来执行;但是下面这些函数摆放的顺序没关系
        def set_default_headers(self): #设置头
            print('--set_default_headers--:设置header')
        def initialize(self): #初始化
            print(' ---initialize---:初始化')
        def prepare(self): #准备工作
            print(' ---prepare---:准备工作')
        def get(self,*args,**kwargs):  #处理get请求
            print(' ---get---:处理get请求'+ ' <br>')
            self.write('ssasasasas')
        def post(self,*args,**kwargs): #处理post请求
            self.write(' ---post---:处理post请求'+ ' <br>')
        def write_error(self, status_code, **kwargs):  #处理错误
            print(' ---write_error---:处理错误')
        def on_finish(self): #结束,释放资源
            print(' ---on_finish---:结束,释放资源')
  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8964808.html
Copyright © 2011-2022 走看看