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

tornado的请求与响应的更多相关文章

  1. tornado 03 请求与响应

    tornado 03 请求与响应 一.请求与响应 浏览器与服务器之间沟通的到底是什么信息 #服务器在后台一直保持运行着 #浏览器通过URL(路由.地址)发送请求 #服务器接收请求了通过tornado处 ...

  2. 2.(基础)tornado的请求与响应

    之前我们介绍了tornado 的基础流程,但是还遗留了一些问题,今天我们就来解决这些遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, ** ...

  3. 2.tornado请求与响应

    之前我们介绍了tornado的基础流程,但还遗留了一些问题.今天我们就来解决遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, **sett ...

  4. tornado请求与响应

    tornado中处理请求与响应的类如下, 所有视图类必须继承该类: tornado.web.RequestHandler 一. 响应之self.write()方法 1.  该方法可返回值的类型: 当返 ...

  5. Django底层剖析之一次请求到响应的整个流程

    As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...

  6. 初入网络系列笔记(4)HTTP请求和响应

    一.借鉴说明,本博文借鉴以下博文 1.starok,HTTP必知必会,http://www.cnblogs.com/starstone/p/4890409.html 2.CareySon,HTTP协议 ...

  7. http协议(二)请求和响应报文的构成

    http协议用于客户端和服务器之间的通信,请求访问资源的一方称为客户端,而提供资源响应的一方称为服务器端. 下面就是客户端和服务端之间简单的通信过程 PS:请求必须从客户端建立通信,服务端没收到请求之 ...

  8. iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全

    一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...

  9. struts2基础——请求与响应、获取web资源

    一.请求与响应 Action1.含义:(1) struts.xml 中的 action 元素,也指 from 表单的 action 属性,总之代表一个 struts2 请求.(2) 用于处理 Stru ...

随机推荐

  1. pthread_create线程终止问题

    一直以为,程序创建线程,线程运行结束会自动清空资源 最近在一个项目中用到了线程,除去业务逻辑,我把他简化出来是下面这样 //pthread.c 错误demo示例#include <stdio.h ...

  2. 并发编程学习笔记(七、Thread源码分析)

    目录: 常见属性 构造函数 start() run() 常见属性: /** * 线程名称 */ private volatile String name; /** * 线程优先级 */ private ...

  3. 5. git-lab 项目操作

    项目操作 一.给成员授权项目权限 之前我们是给组增加成员.  当有的项目需要给组下面的成员授权不一样的时候. 我们需要在项目里面给成员授权权限 点击管理区域 点这个项目 看下图,我们可以看到  现在这 ...

  4. 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法

    一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表 ...

  5. [C1W3] Neural Networks and Deep Learning - Shallow neural networks

    第三周:浅层神经网络(Shallow neural networks) 神经网络概述(Neural Network Overview) 本周你将学习如何实现一个神经网络.在我们深入学习具体技术之前,我 ...

  6. INVERSION包

    1.安装该包 if (!requireNamespace("BiocManager", quietly = TRUE))install.packages("BiocMan ...

  7. session未释放

    客户反映一个关于session的bug,说有了1,2天以后,就无法登陆了. 我们这边试了好几天,都没有出现类似问题,后来没办法,只能远程开会,7点左右和他们通话,偶然发现他们居然直接关remote d ...

  8. Forethought Future Cup - Elimination Round D 贡献 + 推公式 + 最短路 + 贪心

    https://codeforces.com/contest/1146/problem/D 题意 有一只青蛙,一开始在0位置上,每次可以向前跳a,或者向后跳b,定义\(f(x)\)为青蛙在不跳出区间[ ...

  9. 【BZOJ3534】[SDOI2014] 重建(矩阵树定理)

    点此看题面 大致题意: 给你一张图,每条边有一定存在概率.求存在的图刚好为一棵树的概率. 矩阵树定理是什么 如果您不会矩阵树定理,可以看看蒟蒻的这篇博客:初学矩阵树定理. 矩阵树定理的应用 此题中,直 ...

  10. .NET西安社区「拥抱开源,又见 .NET:壹周年Party」活动简报

    「拥抱开源,又见 .NET」:壹周年Party  .NET西安社区一岁啦!!!!7月21日,伴随着「拥抱开源,又见 .NET」系列最后一次线下分享活动暨一周年Party圆满结束, .NET西安社区一岁 ...