session与g

请求来了opensession

-ctx.push()---->也就是RequestContext类的push方法的最后的地方:
    if self.session is None:
        #self是ctx,ctx中有个app就是flask对象,   self.app.session_interface也就是它:SecureCookieSessionInterface()
        session_interface = self.app.session_interface
        self.session = session_interface.open_session(self.app, self.request)
        if self.session is None:
            #经过上面还是None的话,生成了个空session
            self.session = session_interface.make_null_session(self.app)

 

请求走了savesession

-response = self.full_dispatch_request() 方法内部:执行了before_first_request,before_request,视图函数,after_request,savesession
-self.full_dispatch_request()---->执行:self.finalize_request(rv)-----》self.process_response(response)----》最后:self.session_interface.save_session(self, ctx.session, response)

 

请求扩展相关

before_first_request,before_request,after_request依次执行

 

flask有一个请求上下文,一个应用上下文

-ctx:
    -是:RequestContext对象:封装了request和session
    -调用了:_request_ctx_stack.push(self)就是把:ctx放到了那个位置
-app_ctx:
    -是:AppContext(self) 对象:封装了当前的app和g
    -调用 _app_ctx_stack.push(self) 就是把:app_ctx放到了那个位置

 

-g是个什么鬼?

专门用来存储用户信息的g对象,g的全称的为global 
g对象在一次请求中的所有的代码的地方,都是可以使用的 

 

代理模式

-request和session就是代理对象,用的就是代理模式

 

                                             

posted @ 2019-08-05 09:43  -Rye-  阅读(102)  评论(0)    收藏  举报