我怎样才能最好地了解django如何在内部工作?

时间:2010-11-24 15:11:45

标签: django cgi webserver internals

所以我一直在玩django,我确实喜欢这个框架。但是,我想更好地了解它是如何“实际运作”的。

这是我目前对client-server-django世界的看法,这是非常粗糙的,可能会让你的脚趾甲卷曲(对不起)......

  1. 浏览器向服务器发送Http请求。
  2. 服务器发挥其魔力,并通过CGI将请求转储到django(?)
  3. django的某些部分(?)接收请求并将其转换为django请求对象。
  4. 请求对象在通过中间件的一些模糊路径上徘徊,这对它做了奇怪的事情。
  5. 请求对象最终以某个函数(哪个?)结束,该函数查看url,从urls.py中取出模式并调用视图函数。
  6. 视图函数发挥其魔力(模型和模板作为合作伙伴),这可能是我最强烈的理解幻觉(好吧,除了数据库抽象魔法,就是......;)
  7. 视图函数返回一个HttpResponse对象,我猜这是在CGI的一些模糊路径上返回的。
  8. Webserver再次接管并将Http响应发送给客户端。
  9. 好的,那么你问我的问题到底是什么?那么,这一切是如何运作的呢?我并不指望你用勺子喂我一切......我怀疑答案最终将是“阅读来源,卢克”,但是,如果

    我将不胜感激
    1. 你可以清理我的错误观念
    2. 告诉我从哪里开始?我想做的是抓住一个调试器并且只是完成这个过程几次,但我真的不知道从哪里开始
    3. 你可以给我指出任何能够解释这个问题的文件......是的,我听说过这个google的东西但是没有真正找到任何超级有用的东西。
    4. 非常感谢 保罗

2 个答案:

答案 0 :(得分:13)

嗯,你的第一个误解是CGI与此有关。它没有,除了非常不可能和很少使用的服务器配置。

大多数情况下,Django通过WSGI与服务器连接,WSGI是Web服务器与Web应用程序通信的Python规范。您可以在WSGI website找到更多信息。

除此之外,James Bennett in his blog entry here对整个请求/响应周期进行了很好的描述。它已经很老了,但是自从写完以来Django在那个级别上几乎没有变化。

答案 1 :(得分:8)

观看来自Pycon 2015的James Bennett的Django in Depth教程。

Pycon website开始,这是詹姆斯谈话的摘要:

  

Django的大多数书籍,教程和其他文档都采用了高级方法来处理其组件和API,因此几乎没有划分框架的表面。但是,在本教程中,我们将详细介绍一下,从ORM的内核到模板系统的内部,以及管理界面的真正工作方式。

     

无论您是最新的新手还是经验最丰富的应用程序开发人员,您都会对Django有更深入的了解,并且可以在您自己的应用程序中使用大量的新技巧和窍门。