前篇介绍了Flask中实现了数据隔离的Local类,对于这个类我们该怎么用呢?本篇介绍使用LocalStack对象维护栈
文章脉络:
- 首先我将先自行实现一个LocalStack类
- 然后在与源码的实现方式进行比较
自定义LocalStack
- 在上一篇实现的Local类的基础上,我们增加一对key-value,key为’stack’,value为列表,在此基础上我们定义LocalStack类。
- 它的属性是 Local类的实例,方法是对
storage = { 线程/协程id :{'stack':[]}}
模拟栈的操作
1 | # globals.py |
使用 LocalStack
1 | # run.py |
这样我们就实现了数据隔离的栈
Flask源码中的LocalStack
Local的定义
1 | # werkzeug.local.py |
LocalStack定义
1 | # werkzeug.local.py |
为什么要使用LocalStack?
换句话理解就是为什么我们不直接使用Local?而要通过LocalStack类将其封装成栈的操作?
为了在多应用情景下让一个请求可以很简单的知道当前上下文是哪个。如在多app嵌套的时候,print(current_app)
打印出的就是当前的app
1 | from my_app01 import app01 |
总结
- 在Local的基础上,我们存放了’stack’为key,列表为value的键值对,形成了栈空间
- 在栈空间的基础上我们定义了push,pop,top等方法来操作栈空间