Response对象负责对客户端的响应,每个请求都会有一个Response对象,那么它在一个请求的声明周期内是怎么发挥做用的呢?html
先回顾一下http请求的flask处理流程:python
接收请求--》建立请求上下文--》请求上下文入栈--》建立该请求的应用上下文--》应用上下文入栈--》调用视图函数处理逻辑--》请求上下文出栈--》应用上下文出栈json
Response对象在调用视图函数处理逻辑后就被建立,可是对客户端的响应在应用上下文出栈后执行。flask
app在视图函数处理逻辑完成后获得响应须要的Body,code和header,调用make_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设置为当即失效
设置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的回调函数。cookie
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给咱们的回调函数,调用它就能够设置响应的状态码和响应头;session
return返回给客户端Body部分。app
Response对象负责接收通过视图函数处理后的返回数据,将其解析编码成http协议要求的数据格式,而后调用http服务器的回调函数同时将数据返回给客户端。dom