高频面试题之Flask框架的上下文
Flask框架中分为2种上下文: 请求上下文(request context)和应用上下文(app context)
一般面试的问点在于:两种上下文是什么? 有什么区别? 什么场景下使用?
Flask框架-请求上下文
请求上下文: 保存了客户端和服务器交互的报文数据。
一般像request对象和session对象都在请求上下文的环境中。
作用:
Flask从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象是一个很好的例子,它封装了客户端发送的HTTP请求。要想让视图函数能够访问请求对象,一个显而易见的方式是将其作为参数传入视图函数,不过这会导致程序中的每个视图函数都增加一个参数request(Django框架的视图函数就是这么实现的),除了访问请求对象,如果视图函数在处理请求时还要访问其他对象,情况会变得更糟。所以通过请求上下文可以保存request对象方便使用!
场景:
1.request对象的参数解析,校验
2.session对象的操作
Flask框架-应用上下文
应用上下文:在程序运行过程中, 上下文中保存了一些需要运行的一些数据。
一般像:配置信息, current_app, g对象都在应用上下文环境中。
手动创建上下文的两种方法:
1. with app.app_context()
2. app = current_app._get_current_object()
作用:
应用上下文不是一直存在的,它只是request context 中的一个对 app 的代理(人),所谓local proxy。它的作用主要是帮助 request 获取当前的应用,一次会话会产生一次应用上下文。主要是方便我们在处理业务逻辑的时候方便使用项目整体配置, current_app, g对象保存的数据。
场景 :
1.利用g对象传递业务数据
2.current_app获取整个应用的配置项