1:Flask 使用 request对象代理了当前请求的上下文。这么做什么好处和坏处?
好处:flask封装了C端发起request对象,这样就可以使用上下文临时把某些对象变为全局可访问;如果不封装,视图函数就要传入request对象,这时候视图函数要是还要访问其他对象,会把视图函数弄得一团糟,
坏处:增加了理解的难度。虽然用起来很爽。但是request是怎么来的,传递过程,代理什么的。
2:Flask 的核心特性封装的request对象,做了什么事?
3,before_requests钩子和before_app_requests钩子的区别?
使用蓝图时,before_requests / after_requests 钩子只能控制蓝图内路由,如果是控制全局内的路由,要用before_app_requests
4,如何在多个环境执行单元测试?
多环境单元测试的解决思路:延迟程序实例的创建,这样就可以创建多个程序实例
操作:在app路径下的__init__.py文件里的工厂函数去实例化app对象
5,Flask的路由是怎么实现的?
使用时我们都知道的方式是:URL-> viewfunction
其实Flask还有一件事就会中间加入了端点endpoint,也就是 URL -> endpoint -> viewfunction
endpoint是处理单元的id,id映射到view函数,flask在收到request时候,会去endpoint里找viewfunction注册的id
6,Flask_login是怎么使用的?
flask_login的使用步骤:
1,初始化flask_login,设置seesion的保护等级,设置登录路由的endpoint
2,实现一个user回调,也就是怎么获得user的id
3,在需要先登录的view函数,加上装饰器login_required
7,Flask_login为什么要用user_loader?
源码里说:
Reason to let YOU define this self.user_callback: Because we won't know how/where you will load you user object.
flask_login无法知道在哪里加载用户对象,也就是flask_login无法知道要访问数据库哪一个表,无法知道在哪里加载user的id就无法在模型里对user标记为已登录,所以需要用回调来确认加载哪个table哪个字段