专栏名称: Python程序员杂谈
关注PythonWeb开发及相关领域的方方面面,分享在实际工作中遇到的问题及解决方案。关注the5fire,了解Python开发的点点滴滴。
目录
相关文章推荐
海胆新闻  ·  太突然!知名歌手方大同去世,年仅41岁 ·  2 天前  
海胆新闻  ·  太突然!知名歌手方大同去世,年仅41岁 ·  2 天前  
最江阴  ·  知名歌手方大同去世,年仅41岁! ·  2 天前  
最江阴  ·  知名歌手方大同去世,年仅41岁! ·  2 天前  
天津广播  ·  最新 | 知名歌手方大同去世!年仅41岁 ·  2 天前  
天津广播  ·  最新 | 知名歌手方大同去世!年仅41岁 ·  2 天前  
970水果糖  ·  《哪吒2》,全球第七! ·  2 天前  
970水果糖  ·  《哪吒2》,全球第七! ·  2 天前  
51好读  ›  专栏  ›  Python程序员杂谈

《Django源码解析- 视频版》前言-开篇词

Python程序员杂谈  · 公众号  ·  · 2018-06-27 20:54

正文

前言 - 开篇词

很高兴能有这一系列的内容,可以分享自己对于Django源码的认识,交流源码学习的心得。今天正式开始。下面先来自我介绍一下。

作者介绍

网名:the5fire 博客: https :// www . the5fire . com ,Python Web开发工程师,到今年为止,已经用了8年Python了。主要熟悉框架为Django和Tornado,熟悉Django的大部分模块,以及可以熟练的对各种模块进行定制化开发,包括Admin。Tornado开发的项目承载过亿级访问量,对Tornado的特性有比较深的理解。

刨源码经历

既然是Django源码解析的课程,那么就简单介绍下我刨各种项目源码的经历吧。

1. Tomcat源码

第一次意识到学习框架源码的重要性是源于此,在2011年,那时是在做Java开发,在别人的推荐下看了《How Tomcat Works》这本书,虽然并没有学习完,但依然让我在使用Java开发Web系统时有了更通透的感觉,至少是知道了我所编写的业务代码下的框架是如何运作的。

另外更重要的一点是,让我意识到,有很多优秀的开源项目,其实是可以直接去学习其源码的。再次之前因为是在使用VB.NET和C#开发项目,所以不太有意识。

可以说第一次阅读源码的经历让我打开了新世界的大门。

2. Django 和 Tornado

看Django的源码是纯属工作需要,当时我们基于Django的Admin系统进行了很多定制开发,而Django的Admin部分文档偏偏很少,因此大部分的需求都需要去查看Django Admin的源码来进行处理。

这么做带来的好处就是遇到问题是不依赖文档,直接通过查看源码来确认有哪些API可以使用,可以用来hook,或者patch。

在前面的课程中我也介绍过,Django的Admin用到了Django提供的各个模块:Model,Form,Widget,QuerySet等,因此通过这个机会熟悉了Django常用的模块。

看Tornado源码是源于我们认为相对于Django庞杂的业务代码来说,Tornado的代码的技术含量更高。有一段时间团队成员都在私下学习Tornado的源码,对于要承载高流量的业务来说,完全掌握所使用的框架是非常有必要的。

从读源码的体验上来说,Django的源码纷繁复杂,各种模块之间的依赖需要阅读大量相关代码才能捋的清楚。而Tornado的代码是,晦涩难懂,因为它基于事件模型封装出来的协程实现方案是非常绕的。两者是不同的逻辑,可以学习到不同的内容。

3. Nginx

阅读Nginx源码是为了解决当时遇到的一个问题:《Nginx主动监测模块upstream check误用导致的502--no live upsteams》。

从解决的问题的方向上来说,阅读Nginx源码并不是最有效的方式,毕竟是C的代码,没有那么熟悉。但当时没有想到nginx_upstream_check_module模块的默认值为default_down=true,以为是我们的Nginx配置有问题。所以花了些时间调试并阅读了Nginx部分源码,从根上找到了问题所在。

从技术储备上来说,也是有些收获,虽然现在回忆起来有很多细节都忘了,但再次阅读源码应该问题不大。关键在于熟悉了Nginx启动、重启、模块加载以及处理请求的流程。

4. Python源码

比较早的时候跟着《Python源码刨析》的书看过几章,并不是很深入,这里不再多说。

看源码能得到什么

看源码跟看书的目的其实是一样的,都是为了更多的掌握一个工具使用。很多时候我们能够熟练使用一个工具,除了使用时间比较长导致的熟能生巧外,还有另外一个原因是我们对工具的实现原理比较清晰。

只有这样我们才对使用工具所能达到的结果有一个比较明确的把握。

其实从上面我看源码的介绍也能体会到,我们每天都在写代码,我们的代码每天都在为很多人提供服务,我们有必要了解其运行细节。了解细节除了让我们能够更好的认识代码世界之外,还能提升我们开发项目以及解决问题的能力,比如二次开发,深度定制之类的业务需求。

Django源码解析期望传递的信息

说到具体的Django源码解析期望传递的信息,我个人的看法是这样,当我们在学习和使用Django时,经常会遇到各种各样的问题,比如性能,比如代码组织结构,比如API的使用等。

很多问题的出现都是因为对框架的不熟悉导致,有些是因为用的少,有些是因为不理解Django的实现逻辑。

所以这个专栏的目的是,让大家熟悉Django源码的常用模块,了解它在实际业务开发时的作用。只有当你对一个工具的运作原理有了更深入的认识时,用起来才能得心应手。

另外一个目的是我们一起学习Django源码的设计,从工程的角度来看,Django源码就是一个很好的工程,它能广泛被大家所用,肯定是基于其他合理的设计以及对外提供的功能接口。

所以我们也可以通过学习Django源码来学习如何设计/组织我们的项目。

内容核心概念

原则:从实际用处着手,逐步深入

整体思路:从认识框架、安装框架、使用框架开发项目、到项目最终上线被用户访问的思路来分析源码。

目标读者:

  • 能够使用Django开发项目,想要更深入的了解Django内部原理

  • 已经开始尝试翻源码,希望找个人一起交流

  • 想要通过学习Django源码,写出更好代码

注意事项:

本套视频的更新频率为周更,每次更新两三节内容(每节控制在30分钟左右)

使用的Django版本声明

Django目前为止的最新版代码为Django 2.0.6,我们会以此版本为主来进行学习。注释版的代码会公开在我的GitHub上: https







请到「今天看啥」查看全文