python-flask小结
1.flask和django区别
1.flask是一个轻量级的,django是一个重量级的,包含了很多组件,包括admin,orm等,flask虽然没有但可以引入第三方组件。
2.flask是基于上下文管理做的一个应用上下文appcontext和请求上下文requestcontext管理。django只是通过参数传递。
2.flask生命周期
flask和django一样也是基于wsgi,先创建app和request的context,放在localstack,再然后请求先走beforer_euqest,再然后试图,最后after_request,最后销毁ctx。
3.wsgi本质
创建一个socket服务端
4.flask蓝图:
默认flask通过一个脚本实现,由于项目业务比较多,为了方便项目的业务拆分,我们会创建多个文件,为了方便管理用蓝图管理
4.flask的蓝图和django的app区别
相同:都可以用于业务拆分,需要注册才能使用,都可以在自己的内部定义文件
不同点:注册位置不同,flask在app创建的时候注册,django在setting配置文件注册。2.flask的中间件(before_request,after_reqyest)应用力度更加细,可以应用在某个方法,django只能在整个app上。3.django内置了很多,flask需要自己导入
5.在flask-app对象中可以传入静态文件模板配置,通过app.config读取配置
6.特殊装饰器:
before_request,after_request,before_first_request,route,template_global
7.创建装饰器:
需要添加funtools.wraps
8.flask的session:
内置的session,session的数据是以加密的形式放在cookie中。
9.flask请求流程
1.创建两个ctx=Requestcontext,ctx_app=AppContext, requestcontext封装了request和session,appcontext封装了app和g, 并将它们放入到localstack中.
2.执行before_first_request,再执行before_request
3.执行视图函数
4.执行after_request
5销毁两个ctx,防止内存泄露
10.g是什么
全局变量,生命周期是从请求到来直到请求结束
11.数据库连接池--dbutils
12.flask中的local为什么要以线程id进行区分
flask可以开启多线程,处理用户请求时,需要将线程之间的数据隔离开防止数据混乱。
13.为什么将flask中的local维护成一个栈?
在web 的runtime时,栈中永远只有一个对象。只有在写离线脚本时出现多with上下文嵌套时(很少出现,但得有),才会在栈中放置多个。