框架部分知识点汇总
threading.local 以及作用?
为每个线程生成一个对象,实现线程间的数据隔离
Flask上下文管理流程以及和django比较?
- 项目启动时会生成两个LocalStack实例_request_ctx_stack和_app_ctx_stack ,每个对象都有一个_local属性,是一个Local实例
- 还会产生4个LocalProxy实例,分别是request,session,current_app还有g
- Local类似于threading.local,但是Local还能够为协程来分隔数据
- 当请求来临时,会产生一个ctx即RequestContext对象,这个类封装了request和session,session在实例化是还是个None
- 然后会调用ctx的push()方法,而ctx的push回将自身作为参数,调用LocalStack实例的push方法,在LocalStack的方法中通过.的方式向_local实例中设置了一个空列表,又将RequestContext实例追加进其中,而Local的setattr方法则是完成了以进程或线程ID为键将设置的列表作为置
- 取值过程则是通过导入rsquest,或session,调用了LocalProxy中的__getattr__或__setitem__,其中有执行了类初始化时是传递的偏函数,通过LocalStack从Local中取得RequestContext,又获得了想要的属性,为此属性设置值或从此属性中取值
Flask中上下文管理主要涉及到了那些相关的类?并描述类主要作用?
同上
Flask中的g的作用?
一次请求开始到结束的全局变量
为什么要把Local的值维护成一个列表?
在多app离线脚本中,使的每层能够使用自己的app对象
Flask中多app应用是怎么完成?
主要是通过分割url来判断取那个app,所以也可以用来实现路由分发的功能
原生SQL和ORM的区别?
orm是将一条数据封装成一个对象,通过对象的方式来查询,而不用编写复杂的sql语句,