flask基础之Response响应对象(九)

前言

Response对象负责对客户端的响应,每一个请求都会有一个Response对象,那么它在一个请求的声明周期内是怎么发挥作用的呢?

Response对象

响应发生的位置

先回顾一下http请求的flask处理流程:

接收请求--》创建请求上下文--》请求上下文入栈--》创建该请求的应用上下文--》应用上下文入栈--》调用视图函数处理逻辑--》请求上下文出栈--》应用上下文出栈

Response对象在调用视图函数处理逻辑后就被创建,但是对客户端的响应在应用上下文出栈后执行。

app在视图函数处理逻辑完成后得到响应需要的Body,code和header,调用make_response方法创建一个Response对象。

响应对象分析

  • Response初始化
class Response(BaseResponse):
    pass
class BaseResponse(object):
    charset = ‘utf-8‘ # 设置响应对象的编码
    default_status = 200 # 设置默认的响应状态码
    default_mimetype = ‘text/plain‘ # 设置响应的body默认的类型,即text文本
    automatically_set_content_length = True # 设置是否使用默认的长度限制响应大小
    max_cookie_size = 4093 # 允许的默认cookie最大的字节数,大于仍然会被发送,但可能被浏览器忽略

    def __init__(self, response=None, status=None, headers=None,
                 mimetype=None, content_type=None, direct_passthrough=False):
        pass

# 初始化参数
response:响应数据的body部分,
status:响应的状态码
headers:响应的头部
mimetype:如果charset参数没有设置就使用这个设置
content_type:响应body的格式,如text或json等
  • 重要的属性和方法
response.data:获取二进制的响应body数据
response.data = ‘xxx‘ :设置响应body数据
response.calculate_content_length:获取响应的总字节数
response.header:获取响应对象的头部信息
response.status:获取字符串格式的响应状态码
response.status_code:获取int格式的响应状态码

response.freeze():将响应对象序列化,返回None
response.set_cookie():设置cookie
response.delete_cookie():删除cookie,将cookie设置为立即失效
  • set_cookie

设置cookie这个方法使用比较频繁,即原理是对响应头的Set-Cookie键的值进行设置,其受到response对象的max_cookie_size参数的限制。

def set_cookie(self, key, value=‘‘, max_age=None, expires=None,
                path=‘/‘, domain=None, secure=False, httponly=False):
    pass

# 参数:
key:cooke的键值对的键;
value:cooke的键值对的值;
max_age:cookie的有效时间,单位为秒,如果为None,则设置成和session一样的时间长度
expires:cookie的终止日期;
path:定义服务器上哪些路径下的接口可获取服务器设置的Cookie,默认为/
domain:确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信息。
secure:如果设置为True,传输必须使用https协议
httponly:如果设置为True,表示允许js脚本访问cookie,设置为false表示不允许;

发送响应

Response对象在创建后就需要向客户端发送响应了,我们知道,它会调用http服务器如gunicorn的回调函数。

class Response:
    def __call__(self, environ, start_response):
        app_iter, status, headers = self.get_wsgi_response(environ)
        start_response(status, headers)
        return app_iter
  • start_response是gunicorn给我们的回调函数,调用它就可以设置响应的状态码和响应头;
  • return返回给客户端Body部分。

总结

Response对象负责接收经过视图函数处理后的返回数据,将其解析编码成http协议要求的数据格式,然后调用http服务器的回调函数同时将数据返回给客户端。

参考

原文地址:https://www.cnblogs.com/cwp-bg/p/10084503.html

时间: 2024-08-28 19:53:05

flask基础之Response响应对象(九)的相关文章

Django视图函数之request请求与response响应对象

官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一个HttpRequest包含有关请求的元数据的对象. 常用的值和操作: ·         request.method      #获取请求属性 ·         request.GET         #获取GET请求的参数字典信息,用.get()取值 ·         request.PO

Flask基础以及Response三剑客

Flask的特点: 优点:小而精.三方组件全    缺点: 性能相对较差   因为依赖三方组件所以在更新的时候难免不同步 基础模板 from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello World" app.run() Response三剑客+两个常用的小儿子 剑客一: HttpResponse: return "Hello Worl

django 获取request请求对象及response响应对象中的各种属性值

1 django request对象和HttpResponse对象 2 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) 3 HttpRequest.scheme 请求方案(通常为http或https) 4 HttpRequest.body 字节字符串,表示原始http请求正文 5 HttpRequest.path 字符串,表示请求的页面的完整路径,不包含域名 6 7 HttpRequest.get_host() 获取主机地址 8 9 HttpReques

flask基础之LocalProxy代理对象(八)

前言 flask框架自带的代理对象有四个,分别是request,session,g和current_app,各自的含义我们在前面已经详细分析过.使用代理而不是显式的对象的主要目的在于这四个对象使用太过频繁,贯穿整个请求周期,显式传递很容易造成循环导入的问题,需要一个第三方的对象来进行解耦. 代理模式简介 代理模式是程序设计的一种结构模式,其目的是使调用者和执行者之间不发生直接的关系,而是使用一个代理人,这样调用者和执行者就进行了解耦,可以避免许多的问题. 代理模式使用的场景: 为真实目标类创建一

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

Flask框架 请求与响应 & 模板语法

目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) Flask 中的 Request(请求) Flask 模板语言简单使用 Flask框架参考手册 原文地址:https://www.cnblogs.com/guokaifeng/p/11587311.html

response (响应对象)

一.response响应过程 在去发送一个请求时, 会找到tomcat引擎 引擎会找到对应的web应用,并且会创建request对象和response对象 找到应用后, 会执行应用的web.xml再去根据url-patten的内容创建Servlet对象 并且会调用Servlet对象的service方法,并且把创建的request对象和response对象传入到方法当中 拿到response对象后, 自己可以往响应当中写入一些自己给客户端的内容,通过response.getwrite().wirt

测开之路一百二十七:flask之构造response对象

可以使用flask.make_response构造自定义响应信息 构造一个响应信息为文本,状态码为404 响应 响应数据为json,状态码为200 返回html # coding:utf-8from flask import Flask, make_response, render_templateimport json app = Flask(__name__) @app.route("/rp/")def send_response(): """ 构造响

flask基础之请求处理核心机制(五)

前言 总结一下flask框架的请求处理流程. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) flask基础之jijia2模板语言进阶(三) flask基础之app初始化(四) WSGI协议 一般来说http服务器和框架需要进行解耦,http专门负责接受HTTP请求.解析HTTP请求.发送HTTP,响应请求等:而web框架负责处理请求的逻辑,和数据库的交互等等,那么它们之间需要约定一套接口使得http服务器能够调用web框架的处理逻辑,这个协议就是