Flask的奥秘五
2020-07-14 05:46
239 查看
一、上下文管理流程
- 当请求到来时:
flask将request和session封装成RequestContext,让后放入flask的Local中 - 当时图执行时
导入request,调用_lookup_req_object函数去Local中获取RequestContext,再到RequestContext中获取request,session - 当请求结束时
会调用RequestContext对象的auto_pop()方法将RequestContext从Local中移除。
源码流程如下:
图片比较模糊,可到https://1drv.ms/u/s!AkiecrlcNuU_i2wSuNaCA3-qdxuN?e=dpoRWu查看原图。
二、其他知识点
- 获取线程和协程的唯一标识
# 获取线程的唯一标识 from _thread import get_ident print(get_ident()) # 协程的唯一标识 from greenlet import getcurrent as get_ident print(get_ident())
-
偏函数和itertools.chain的使用
偏函数:
偏函数就是预先传递一个函数1的若干个参数,反回一个新的函数2,函数2只需要传递函数1剩余的参数,作用就是预先传递参数。itertools.chain:
将两个序列连接在一起,返回一个chain对象,可以转换成列表
from functools import partial def fun1(a, b): print(a + b) fun2 = partial(fun1, 1) print(fun2(2)) # 结果输出3 from itertools import chain a = [1, 2, 3] b = [4, 5, 6] print(list(chain(a, b))) # [1, 2, 3, 4, 5, 6]
- __setattr__方法和__getattr__方法的使用
这样可以让取值赋值非常方便,但是在__init__方法在的写法要注意,写成self.local_dict = { } 就会造成无限递归。
from _thread import get_ident class local(object): def __init__(self): object.__setattr__(self, "local_dict", {}) object.__setattr__(self, "get_ident", get_ident) def __setattr__(self, key, value): self.local_dict[self.get_ident()] = {key: value} def __getattr__(self, item): try: return self.local_dict[self.get_ident()][item] except: return None l = local() l.xx = 1 # 这句就会调用 __setattr__ 方法将xx=1存入local_dict字典中 l.xx # 这句就会调用__getattr__方法,从local_dict中取出xx的值
相关文章推荐
- flask笔记(2)
- flask 单元测试
- Flask+Nginx+Gunicorn+Redis+Mysql搭建一个小站
- Dec-21th-Flask-note
- 白帽学院靶场之编辑器的奥秘(一)
- 2018最新网易云课堂Python Flask框架全栈开发
- python web开发 之 flask教程(二)
- 网易云课堂Python Flask框架全栈开发(200课全)
- windows 7 下安装eclipse,python,pydev,flask步骤
- Flask01
- Flask 安装和配置(RedHat环境)
- flask中的蓝图实现模块化的应用
- Flask 多文件基本结构
- Ubuntu 14.04 配置 Nginx + uWSGI 托管 virtualenv 下 Flask 应用的一点注意事项
- Flask入门(五)~request模块的属性及上下文
- 【翻译】使用nginx作为反向代理服务器,uWSGI作为应用服务器来部署flask应用
- python—Flask学习3------输出"Hello World"
- flask笔记:7:用户资料信息页和头像
- Flask学习系列7.1—Flask前端页面使用
- flask-admin章节五:wtforms FormField超级炫酷使用