杂项

Python中的类默认从object作为继承的开始

__init__会承载一些公共定义,如果在类中定义__init__就表名如果调用该类,就必须传入与之相匹配的参数

init方法的第一个参数永远都是self,表示创建实例本身,在__init__方法内部,可以把各种属性绑定到self,因为self指向创建的实例本身

init里指定了啥就传啥,BaseViz中是这么定义的:def __init__(self, datasource, form_data):说明必须传datasource 和 form_data

子类的的方法如果和父类的方法重名,子类会覆盖掉父类。所以TableViz里重写的query_obj/get_data/json_dumps三个方法会覆盖BaseViz里的三个同名方法

@property是Python中的黑魔法,廖雪峰黑魔导师已经讲明白了。

在BaseViz类的__init__方法中主要的工作应该是从传来的form_data中摘取一些信息供给后面使用。

get_extra_filters

调用过程经过缓存相关方法后,进入到get_extra_filters方法。其实触发这里是因为后面的query_obj方法,作用是取出在前端用Filter Box做数据筛选交互的时候产生的查询,当我们在前端操作筛选框,会看到实时的数据视图刷新,整个交互过程中,筛选的行为也是通过form_data传递,到后端从这里解析出来

TableViz::query_obj

解读BaseViz的query_obj后,紧接着看在TableViz中重写的query_obj,我原来以为子类会覆盖掉父类中的同名方法,但是在该方法一开始用到了super(),所以魔幻故事发生了,这里的同名方法其实是对父类的调用,不是覆盖。

super(TableViz, self).query_obj()代表直接调用父类中的query_obj(),在父类返回d的基础上,对d做二次修改


TableViz::get_data

在TableViz的get_data方法中,将已经获得的dataframe组合成了dict形式,这一步就将dataframe样式的数据组装成了类似于JSON结构的数据了:


get_payload

在数据查询交互的过程中,都会经由get_payload优先从缓存查询,所有查询的数据也将通过get_payload组织成特定的结构入缓存。最终payload将会是返回到前端的结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,814评论 0 9
  • 一个装逼的小技巧,打印带颜色的log 以表格的方式打印数据 检测方法的调用来源 输出运行次数 测试速度 唔,看到阮...
    羊烊羴阅读 265评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,726评论 2 7