• flask请求上下文管理源码分析


    1、请求到来先执行app.__call__(self, environ, start_response)

    2、然后执行__call__中的wsgi_app方法

    3、执行wsgi_app中的request_context方法

    4、执行wsgi_app中的ctx.push()

     5、执行上述push方法中的_request_ctx_stack.push(self)

    _request_ctx_stack是一个全局的LocalStack对象

    执行LocalStack对象的push方法,将ctx对象添加到Local对象的stack属性对应的列表中

     

     6、接着执行ctx对象push方法中的session_interface.open_session(self.app, self.request)

    执行SecureCookieSessionInterface对象中的open_session方法,获取session,然后赋值给ctx对象的的session属性

    7、然后执行wsgi_app方法中self.full_dispatch_request(),执行视图函数

    ①视图函数中执行request.method

    上述request是全局的request,是一个LocalProxy对象

    实例化LocalProxy对象将上述偏函数(partial(_lookup_req_object, 'request'))存到对象的__local属性中

    request.method=LocalProxy对象.method

    LocalProxy对象.method将会调用LocalProxy对象中__getattr__(self, name)

    执行上述self._get_current_object()

     

    执行偏函数,获取request对象

    ②视图函数中执行session['user'] = 123

    上述session是全局的session,是一个LocalProxy对象

    实例化LocalProxy对象将上述偏函数(partial(_lookup_req_object, 'session'))存到对象的__local属性中

    session['user'] = 123将执行LocalProxy对象中的__setitem__方法

    执行上述self._get_current_object()

    执行偏函数,获取session对象

    8、执行full_dispatch_request()中的self.finalize_request方法

    然后调用finalize_request方法中的process_response方法,将内存中session数据存入到响应个用户的cookie中

    9、最后执行wsgi_app方法中的auto_pop方法,将ctx对象从全局的Local对象的列表中移除

  • 相关阅读:
    POJ NOI0113-05 素数回文数的个数(PKU2928)
    POJ NOI0113-04 垂直直方图(PKU2800)
    POJ NOI0113-03 八进制小数(PKU2765)
    UVALive2245 POJ1131 HDU1376 ZOJ1086 Octal Fractions【进制】
    HDU2708 Vertical Histogram
    POJ2136 Vertical Histogram【打印图案】
    POJ2190 HDU2714 ISBN
    POJ NOI0113-02 不吉利日期(PKU2723)
    POJ NOI0113-01 数制转换(PKU2710)
    POJ NOI MATH-7828 最大公约数与最小公倍数
  • 原文地址:https://www.cnblogs.com/xielinzhen/p/9762200.html
Copyright © 2020-2023  润新知