码迷,mamicode.com
首页 > 其他好文 > 详细

flask请求流程详解

时间:2018-12-11 15:53:26      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:proxy   ffffff   获得   ack   流程图   color   stack   框架   时空   

先看一个流程图:

技术分享图片

1、当一个请求进入的时候,Flask框架首先会实例化一个Request Context,封装了请求信息,保存在Request中。生成请求上下文后,Flask框架会将请求上下文推入到_request_ctx_stack栈中。调用的就是Request Context上下文的push方法

技术分享图片 

   技术分享图片

 

 2、App Context 是如何入栈的呢?

  Request Context在入栈之前,会先去app_ctx_stack栈顶检查下,栈顶元素是否存在,如果栈顶元素为空或者不是当前对象,那么Flask会把App Context推入到app_ctx_stack栈中,然后才会把Request Context推入到request_ctx_stack中。

 

3、request和current_app,这两者用于都是指向各自栈的栈顶的

  技术分享图片

  

  如果栈顶元素时空的,Local Proxy将会出现unbound,这是后使用他们就会报出 working outside application context的错误,这个错误在Flask中,经常不小心就会遇到。

  所以出现这个错误的解决方案就是:当我们要使用current_app的时候,如果栈顶元素为空,那我们手动的将app context推入栈中,就不会出现这种情况了。

  一般流程是:

    ctx = app.get_context():获得APPContext应用上下文对象,

    然后调用 ctx.push() 方法就可以将其推入到栈中

    在使用完毕后,还需要调用ctx.pop() 将其从栈中弹出。

  上面的代码 可以 结合 with 语句 改写成上下文管理的方式 

    with app.app_context():

      pass

 

【栈:后进先出  队列:先进先出】

 

flask请求流程详解

标签:proxy   ffffff   获得   ack   流程图   color   stack   框架   时空   

原文地址:https://www.cnblogs.com/fiona-zhong/p/10102111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!