tornado请求与响应相关

一、配置文件config.py 中的settings 有哪些配置:

  • debug:设置tornado是否工作再调试模式下,默认为false 即工作再生产模式下

    • true的特性: tornado 应用会监控源代码文件,当有保存改动时,会重新启动服务器

      • 如果保存后代码有错误,会重启失败,修改后需要手动重启
      • 取消缓存编译的模板--->compiled_template_cache = False 单独设置
      • 取消缓存静态文件的hash值 -->static_hash_cache = False 单独设置
      • 提供追踪信息 --> server_traceback = False 单独设置
      • autoreload = True ==》仅仅用自动重启
  • static_path:设置静态文件目录
  • tempalte_path:设置模板文件目录

二、tornado 中的路由

# -*- coding: utf-8 -*-

import tornado.web

from views import index
import config class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/', index.IndexHandler),
(r'/login', index.LoginHandler, {'name': 'qzk', 'pwd': '123'}),
(r'/json', index.JsonResponseHandler), # 返回json格式的视图
(r'/header', index.HeaderHandler), # 修改响应头的视图
(r'/status', index.StatusHandler), # 修改状态码的视图
(r'/redirect', index.RedirectHandler), # 重定向的视图
(r'/error/', index.ErrorHandler), # 自定义错误的状态码以及信息的是视图
]
super(Application, self).__init__(handlers, **config.settings)
# -*- coding: utf-8 -*-
from tornado.web import RequestHandler class IndexHandler(RequestHandler):
def get(self, *args, **kwargs):
self.write("ojbk") class LoginHandler(RequestHandler):
def get(self,*args,**kwargs):
self.write('qwer')

三、利用wirte方法写json数据

  • 注意:自己手动序列化json方式 前端response headers 中的 Content_Type属性text/html,而采用write自动序列化方式,Content_Type属性为application/json
class JsonResponseHandler(RequestHandler):
def get(self,*args,**kwargs):
response = {
"name":"qzk",
"password":"123"
}
self.write(response)
# 上述方式返回的是 json对象类型 import json
class JsonResponseHandler(RequestHandler):
def get(self,*args,**kwargs):
response = {
"name":"qzk",
"password":"123"
}
response_str = json.dumps(response)
self.write(response_str)
# 上述方式返回的 text/html 对象类型

四、设置响应头(self.set_header(name,value))

  • 作用:设置响应的头文件(手动设置一个名为name,值value的字段)
  • 参数: name ,value
import json
class JsonResponseHandler(RequestHandler):
def get(self,*args,**kwargs):
response = {
"name":"qzk",
"password":"123"
}
response_str = json.dumps(response)
self.set_header("Content_Type","application/json;charset=UTF-8")
self.set_header("qzk","dsb")
self.write(response_str)
响应结果:
Response Headers:
Content-Length: 34
Content-Type: application/json;charset=UTF-8
Date: Mon, 12 Aug 2019 12:14:31 GMT
Etag: "df54410c9849c29be64aee44631769c071dd82bd"
Qzk: dsb
Server: TornadoServer/6.0.2

五、default_headers()-->规范默认修改响应的头的位置

  • 作用:在进入http响应处理方法之前被调用执行的
  • 注意: 在http处理方法中再使用 self.set_headers() 方法 设置通用的name的值,会覆盖原先在set_default_headers() 中设置的值
class HeaderHandler(RequestHandler):

    def set_default_headers(self):
# 默认修改响应的头都在这边修改
self.set_header("Content-Type", "application/json;charset=UTF-8")
self.set_header("qzk", "dsb") def get(self, *args, **kwargs):
response = {
"name": "qzk",
"password": "456"
}
response_str = json.dumps(response)
self.write(response_str)
响应头
Response Headers:
Content-Length: 34
Content-Type: application/json;charset=UTF-8
Date: Mon, 12 Aug 2019 12:25:32 GMT
Etag: "76512585c844435efcbb60337298886e7e7b9ad3"
Qzk: dsb
Server: TornadoServer/6.0.2

六、self.set_status(status_code,reason=None)

  • 作用:为响应设置状态码
  • 参数:
    • status--状态码的值为 int类型
    • reason--对状态码的描述 str类型 如果reason值为None 则状态码的值必须为正常值
# -*- coding: utf-8 -*-
from tornado.web import RequestHandler class IndexHandler(RequestHandler):
def get(self, *args, **kwargs):
self.write("ojbk") class LoginHandler(RequestHandler): def initialize(self, name, pwd):
"""该方法在执行get之前先执行"""
self.name = name
self.pwd = pwd def get(self, *args, **kwargs):
print(self.name, self.pwd)
self.write(self.name) import json class JsonResponseHandler(RequestHandler):
def get(self, *args, **kwargs):
response = {
"name": "qzk",
"password": "123"
}
response_str = json.dumps(response)
self.set_header("Content-Type", "application/json;charset=UTF-8")
self.set_header("qzk", "dsb")
self.write(response_str) class HeaderHandler(RequestHandler): def set_default_headers(self):
# 默认修改响应的头都在这边修改
self.set_header("Content-Type", "application/json;charset=UTF-8")
self.set_header("qzk", "dsb") def get(self, *args, **kwargs):
response = {
"name": "qzk",
"password": "456"
}
response_str = json.dumps(response)
self.write(response_str) class StatusHandler(RequestHandler): def set_default_headers(self):
# 默认修改响应的头都在这边修改
self.set_header("Content-Type", "application/json;charset=UTF-8")
self.set_header("qzk", "dsb") def get(self, *args, **kwargs):
# self.set_status(404) # 404 为系统的正常的状态码,reason可以为 None
self.set_status(999) # 999 系统不存在该状态码,因此需要设置reason,否则报错
self.write('**************')
"""
Request URL: http://127.0.0.1:8982/status
Request Method: GET
Status Code: 999 Unknown
Remote Address: 127.0.0.1:8982
Referrer Policy: no-referrer-when-downgrade 服务器端报错:
ERROR:tornado.access:999 GET /status (127.0.0.1) 1.00ms
"""

七、重定向 -- self.redirect(url)

  • 作用:重定向到url网站
class RedirectHandler(RequestHandler):
def get(self):
self.redirect('/')
响应头:
General:
Request URL: http://127.0.0.1:8983/redirect
Request Method: GET
Status Code: 302 Found
Remote Address: 127.0.0.1:8983
Referrer Policy: no-referrer-when-downgrade

八、self.send_error(status_code=500,**kwargs)

  • 作用:可以跑出http错误状态码,默认为500,跑出错误后tornado会调用write_error()方法处理,并返回给浏览器界面
  • 注意: 在send_error 之下,就不要在响应输出了,不执行之下的内容

九、write_error(status_code,**kwargs)

  • 用来处理send_error跑出来的额信息,并返回给浏览器错误页面
class ErrorHandler(RequestHandler):
def write_error(self, status_code: int, **kwargs):
if status_code == 404:
code = 404
# 正常情况下返回的自定义的404页面
self.write('资源部存在')
elif status_code == 500:
code = 500
self.write('服务器错误')
self.set_status(code) def get(self, *args, **kwargs):
flag = self.get_query_argument('flag')
if flag == '0':
self.send_error(404)
self.write('you are sb')
Request URL: http://127.0.0.1:8983/error/?flag=0
Request Method: GET
Status Code: 404 Not Found
Remote Address: 127.0.0.1:8983
Referrer Policy: no-referrer-when-downgrade

最新文章

  1. iOS UIWebView重定向Cookie
  2. web学习之开发环境的搭建
  3. ubantu安装sogou输入法
  4. 神奇的C语言
  5. [WinAPI] API 6 [操作驱动器挂载点]
  6. bcd 8421码
  7. J2EE MyBatis使用
  8. Metadata Lock原理5
  9. Linux 命令 - passwd: 更改用户密码
  10. MyBatis<forEach/>如何遍历Map参数里的值
  11. Spring MVC中 controller方法返回值
  12. elasticsearh 中每个节点中需要有相同的插件
  13. Spring配置DataSource数据源
  14. 【转】curl 查看一个web站点的响应时间(rt)
  15. ejb ql 返回object
  16. FreeMarker 入门
  17. python爬虫第三天
  18. for循环里使用查询如何优化(代码库)
  19. Idea实用配置
  20. java.lang.NoClassDefFoundError: org/apache/tomcat/util/res/StringManager

热门文章

  1. if, elif, else及if嵌套
  2. 用curl通过相同IP请求不同域名的URL
  3. 解决汉化pycharme之后设置打不开的问题
  4. 线程休眠sleep
  5. 开源规则引擎 drools
  6. go 爬虫
  7. js将内容复制到剪贴板
  8. 在Azure DevOps Server中运行基于Spring Boot和Consul的微服务项目单元测试
  9. SQLyog 图形化数据库的操作教程
  10. Vue.js 源码分析(二十二) 指令篇 v-model指令详解