Flask技术问题汇总

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是处理单元的idid映射到view函数,flask在收到request时候,会去endpoint里找viewfunction注册的id

 

6,Flask_login是怎么使用的?

flask_login的使用步骤:

1,初始化flask_login,设置seesion的保护等级,设置登录路由的endpoint

2,实现一个user回调,也就是怎么获得userid

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无法知道要访问数据库哪一个表,无法知道在哪里加载userid就无法在模型里对user标记为已登录,所以需要用回调来确认加载哪个table哪个字段

具体解释:https://segmentfault.com/q/1010000010253582

posted @ 2019-01-15 13:43  SonnyZhang  阅读(417)  评论(0编辑  收藏  举报