如何最好地了解Django的内部工作原理?

19

我一直在尝试使用Django,并且真的很喜欢这个框架。然而,我想更好地了解它是如何“背后工作”的。

以下是我目前对客户端-服务器-Django世界的看法,可能非常粗略,可能会让你的脚趾弯曲(抱歉)...

  1. 浏览器向服务器发送HTTP请求。
  2. 服务器通过CGI将请求转储到Django(?)
  3. Django的某些部分(哪些部分?)接收请求并将其转换为Django请求对象。
  4. 请求对象通过中间件走过一些模糊的路径,中间件对其进行奇怪的操作。
  5. 请求对象最终到达某个函数(哪个函数?),该函数查看URL,从urls.py中提取模式并调用视图函数。
  6. 视图函数与模型和模板合作完成其任务,这可能是我对其理解最深刻的地方(当然,除了数据库抽象魔术之外... ;)
  7. 视图函数返回HttpResponse对象,我猜这会通过某些模糊的路径返回到CGI。
  8. Web服务器再次接管并将HTTP响应发送给客户端。

好的,那我的问题是什么?你问。好吧,这一切真的是如何工作的呢?我并不指望你把一切都喂给我...我怀疑答案最终是“阅读源代码,卢克”,但是,我会很感激如果:

  1. 您能澄清我的误解
  2. 告诉我从哪里开始?我想做的就是使用调试器走过这个过程几次,但我不知道从哪里开始。
  3. 您可以指向任何很好地解释这个问题的文档...是的,我听说过谷歌,但是没有找到什么超级有用的。

非常感谢 保罗

2个回答

13

你有一个误解,就是认为CGI与此有关系。实际上,除了一些不太可能和很少使用的服务器配置外,它与此无关。

大多数情况下,Django通过WSGI与服务器交互,WSGI是用于Web服务器与Web应用程序通信的Python规范。您可以在WSGI网站上查看更多信息。

此外,整个请求/响应周期由James Bennett在他的博客文章中详细描述。这篇文章很古老,但自从它被写出来以来,Django在这个层面上几乎没有改变。


嘿,谢谢你提供的两篇文章,非常有帮助!我目前正在看"James Bennett"那篇...那么WSGI是一种CGI吗(好吧,我猜我读了就会知道)谢谢! - Paul

10

观看James Bennett在2015年Pycon的Django深入教程

Pycon网站,以下是James的讲话摘要:

大多数Django的书籍、教程和其他文档都采取了高层次的方法来描述其组件和API,因此仅仅介绍了框架的皮毛。然而,在这个教程中,我们将会详细地了解Django,从ORM的内部工作到模板系统的核心,再到后台管理接口的真正工作方式。

无论您是新手还是经验丰富的应用程序开发人员,您都将获得更深入的Django知识,并掌握大量能够在自己应用程序中使用的新技巧。


3
目前还没有像DiD一样广泛深入的重要著作。Bennett涵盖了Django的每一个特性。这里是演示文稿(共1025张幻灯片)的链接:http://www.slideshare.net/ubernostrum/django-in-depth。 - Filip Dupanović
感谢提供幻灯片链接KRON!当我看到1025时有点害怕,但似乎这是计算所有叠加层,所以我想我可以在一晚上浏览完它们;) - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接