说下本身看源码的一点经验(Python Web 相关)

开发多了,工具用多了,不免会对一些库的源码感到好奇,想知道怎么里面都用了些什么技巧、知识。可是不少时候,咱们会感受到无从下手,下面我说下本身的一点点经验。flask

首先,要看的确定是咱们工做中常常用到的库,这样,你至少知道这个库到底有些什么功能。若是连有什么功能你都不清楚,那么你看源码确定是没有目的性的。不带着问题去看源码,很容易迷失在其中,这样即便花时间了,效果也并很差。后端

而后,刚开始阅读一些库的源码的时候,最好选一些代码量少的先感觉一下。不要认为代码量少就不必看,其实不少小项目的代码风格和技巧,都是值得咱们学习的。在后面的大项目中,咱们可能也会碰到相似的技巧,这个时候咱们相对有经验一些了。bash

最后,不论是小项目仍是大项目,无论你是查资料仍是经过其它方式,内心最好有一个大体结构。咱们很容易碰到一个点读不懂,这个时候,咱们不必去死磕,先了解它的功能是啥。当把整个项目的点串起来的时候,你就对项目的设计思想有了进一步的认识。至于以前没看懂、落下的点,多是某些技巧以前没接触过,也有多是某些理论知识缺少,这个时候咱们能够慢慢去弥补。这样一来,咱们才算是有必定提升。多线程

具体该去看些什么库呢?我结合自身推荐几个,但愿能触发你们的灵感。框架

看过我以前文章的都知道,支撑导出工做的时候,我比较喜欢用 kennethreitz/records 库。有个时候比较空,想看下到底是怎么实现的,恰好,这个库代码也很少,核心逻辑仍是一个单文件,就把它给看完了。看完后,感受仍是 Get 到了一些代码技巧。与这个库有关的另外一个库 kennethreitz/tablib 代码量也很少,感兴趣的也能够去看下。还有我以前提过的 gleitz/howdoi 库,也是单文件,去看下也有好处。相似的项目也不是说看的越多越好,找几个公认的比较好的就行。工具

我主要是写后端的,因此用 Flask、SQLAlchemy、Celery 等比较多。当碰到的业务需求多了后,会慢慢的发现本身有不少细节不大肯定。好比 Flask 能够用多线程跑,可是框架又是怎么保证当前的 request 全局变量就是当前线程的呢?看了源码后才知道有一个 Local 类,用了点小技巧(线程 ID)让咱们看起来线程之间的数据是隔离着的。具体 Flask 怎么支持的 WSGI,咱们能够去看 Werkzeug 库;怎么实现模版渲染的,能够去看下 Jinja 库。带着问题的时候去看代码,效果好不少。慢慢的,咱们便清楚了 Flask 的大体结构,这个时候咱们就能够去找一些以前可能没有理解的点进行深挖。若是你是作后端的,我推荐你能够先看下 Flask、Werkzeug、Requests 库,而后再结合自身状况看下 SQLAlchemy、Celery 等其它库。学习

知道了看哪些库,又怎么开始呢?拿 Flask 示范一下。测试

首先,将库克隆到本地,进入项目根目录,执行命令spa

pip install --editable .
复制代码

将 Flask 安装在当前目录,方便咱们修改测试。线程

最后,跑一个 Demo。进入 examples/flaskr 目录,按照 README 操做

(1)Edit the configuration

(2)pip install --editable .

(3)export FLASK_APP=flaskr

(4)flask initdb

(5)flask run

最后,打开连接 http://localhost:5000 能够看到程序已经正常启动。若是碰到问题,百度/谷歌通常都能解决。

到这,就去看源码中你感兴趣的地方吧。若是有必要,能够修改框架或 flaskr 中的代码后,从新安装运行,验证本身的想法。

本文首发于公众号「小小后端」。

相关文章
相关标签/搜索