抽象思维
作为一只由初级进入中级的程序员,对架构师怀着很崇拜的情感。觉得程序员的最高境界可能就是成为一名资深的架构师了,可是殊不知其实架构思维不只有架构师才可以具有,一名合格的开发人员一定需要抽象能力。才可以对众多复杂的业务进行拆分优化,做出一个通用型系统才是最酷的。
深入flask
它的通用性是怎么做到的
flask框架是很轻量级,所以它的通用
性是很强的,我们可以在它原有的
基础上进行自己的封装,拆分业务层。
下面说一些它值得我们探讨的技术点实现方式。
2
匹配路由
flask-匹配路由,兼容带不带斜杠是用重定向兼容的。为什么要用重定向解决,因为为了保证路由的唯一性。如果不是唯一性的,用不同的url访问,视图函数内容却是一样的,不利于SEO优化。
flask路由不像django一样支持正则匹配。但是flask的灵活度架构可以让我们很快的添加正则匹配功能,我把flask的这种灵活性称为利用了python的动态语法特性。我们再设计一些通用功能类的时候可以利用动态语言的多态。
代码实现
路由注册
下面看看路由注册的实现方式,这里介绍有两种方式
1.装饰器。@app.route()
2.用app对象来注册,app.add_url_rule()
其实装饰器点击到最内部去看,实现方式也是add_url_rule这个函数
flask路由在请求和路由之间多了一个endpoint,不传默认路由函数的名称,路由注册这里用到了装饰器的设计模式,让我们可以配合灵活设计抽象出业务层。
路由是先把规则添加到了url_map里面,有search和endpoint的指向,然后view_func记录所指向的图函数。这里用到了两个数据结构,有兴趣的同学可以在路由那里打个断点看看情况。
总结
这里只是举了俩例子,其实深入了解flask框架的话发现它的很多设计模式和思想在我们自己的项目中都可以用到。例如flask中的请求上下文和内容上下文,不是由全局变量实现的,而是通过视图函数来触发的,我们是不是可以在上下文中加入自己的一些逻辑。其他的flask依赖上下文环境的对象也同样适用这个规则。(编写离线脚本和单元测试一定要注意这个问题)。