flask中current_app、g、request、session源码的深究和理解

本文探讨了Flask框架中current_app、g、request和session的源码分析,揭示了它们如何利用LocalStack和Local确保在多线程环境下保持数据隔离。request和session通过LocalProxy实现全局访问,但实际上是基于线程ID存储在Local对象的字典中,保证了每个请求的独立性。应用上下文current_app和g同样利用类似机制,但存储在不同的LocalStack中。了解这些机制对于理解和调试Flask应用至关重要。
摘要由CSDN通过智能技术生成

本文是我在学习flask中对上下文和几个类似全局变量的思考和研究,也有我自己的理解在内。

为了研究flask中的current_app、g、request、session,我找到定义在global.py的源码:
    

    # context locals
    _request_ctx_stack = LocalStack()
    _app_ctx_stack = LocalStack()
    current_app = LocalProxy(_find_app)
    request = LocalProxy(partial(_lookup_req_object, 'request'))
    session = LocalProxy(partial(_lookup_req_object, 'session'))
    g = LocalProxy(partial(_lookup_app_object, 'g'))


    
    
可以看到主要由_lookup_req_object、_lookup_app_object、_find_app等组成,我先来分析request和session
其实request和session原理上是一样的,所以将其归为一类,称为请求上下文。

我们从最里面看起,partial(_lookup_req_object, 'request'),最外层是一个偏函数,不过这不是重点,它主要是将'request'传给_lookup_req_object,没有其他含义, 顺着_lookup_req_object找到它的源码
    


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值