首页 > 编程语言 > 详细

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

时间:2020-05-31 19:53:23      阅读:39      评论:0      收藏:0      [点我收藏+]

在(一) 中我们分析了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的一个基本的原理和调用

 

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

原文:https://www.cnblogs.com/xxw1/p/12995495.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!