(学习笔记向)python轻量级web框架原理(二)response,session

在(一) 中我们分析了web框架的分发视图函数的过程

视图函数处理请求并返回响应的数据

响应的数据到一个response之间还需要一些过程

flask之中是这样处理的

在分发请求(dispatch_request) 之后定稿请求(finalize_request)

 

我们可以看到在上图中调用make_response和process_response完成处理

  • make_response

  这一步中主要是判断视图函数返回的数据类型是什么,并分别对其处理,并生成response对象

  包括判断是否为空(会报异常),是否为字典(json),是否为字符串(如html文本),元组(body, status, headers)

  ,BaseResponse对象等

  •  process_response

  在此完成对response的进一步处理,包括添加session和cookie等

 

在这个代码中也有这样的两个步骤

 

 

 他们分别对应的代码

  • make_response

  判断返回的类型,将其转化为一个response对象

  •  process_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的一个基本的原理和调用

 

posted on 2020-05-31 16:27  xwwer  阅读(376)  评论(0)    收藏  举报