在(一) 中我们分析了web框架的分发视图函数的过程
视图函数处理请求并返回响应的数据
响应的数据到一个response之间还需要一些过程
flask之中是这样处理的
在分发请求(dispatch_request) 之后定稿请求(finalize_request)
我们可以看到在上图中调用make_response和process_response完成处理
这一步中主要是判断视图函数返回的数据类型是什么,并分别对其处理,并生成response对象
包括判断是否为空(会报异常),是否为字典(json),是否为字符串(如html文本),元组(body, status, headers)
,BaseResponse对象等
在此完成对response的进一步处理,包括添加session和cookie等
在这个代码中也有这样的两个步骤
他们分别对应的代码
判断返回的类型,将其转化为一个response对象
从请求上下文中取出session,如果session存在则将session保存在response中一起返回
然后再经过一些处理生成的response返回,这就完成了一个 从request到response的过程
接下来分析一下session在此过程的是如何生成和被调用的
首先是在请求上下文init的时候 调用了 app的open_session()方法并传入request对象
调用的是如下代码
SecureCookie 是从 werkzeug.contrib.securecookie导入的
代码中用到的load_cookie方法如下
可以看到这个是一个类方法
首先从cookies中拿到key为session的数据
如果这个数据存在 则将其反序列化并返回
将反序列化后的数据保存在self.session 并把自己推入请求上下文的栈中,
将session定义为一个变量,session是从请求上下文的栈中获取的
我们先前分析的process_response和视图函数中的session均是从这个变量获取的
于是我们就分析完了session的一个基本的原理和调用
(学习笔记向)python轻量级web框架原理(二)response,session
原文:https://www.cnblogs.com/xxw1/p/12995495.html