我在哪裏可以得到的技術手冊/內部如何Django的工作細節,即我想知道當一個請求從客戶端進來;我在哪裏可以獲得有關Django內部工作原理的技術信息?
- 着Django函數接收呢?
- 什麼中間件被調用?
- 請求對象是如何創建的?以及什麼類/函數創建它?
- 什麼函數將請求映射到必要視圖?
- 請問你的代碼/視圖被調用
? 等等
Paul.G
我在哪裏可以得到的技術手冊/內部如何Django的工作細節,即我想知道當一個請求從客戶端進來;我在哪裏可以獲得有關Django內部工作原理的技術信息?
? 等等
Paul.G
理解django內部最簡單的方法是通過閱讀專門爲此編寫的書。
閱讀Pro Django。它首先爲您提供深入的元編程理解,並演示如何在django模型中使用它,以動態創建它們。
它與其他許多python概念以及django如何使用它相似。
是的,這是一個必讀! – 2009-08-17 10:22:15
我同意。本書向您展示了Django使用的一些高級Python技術來提供它的實用框架。 – 2009-08-17 18:41:47
我懷疑有關於這個問題的技術手冊。這可能需要一點挖掘,但API文檔和源代碼是您獲得可靠的最新信息的最佳選擇。
文檔經常深入細節時,它必須以解釋爲什麼事情的工作他們的方式。 Django的設計目標之一是不要儘可能地依賴「魔術」。然而,無論何時Django 確實都假設了某些內容(例如,應用內的模板位置),它清楚地解釋了文檔中的原因,並且它總是以可預測的方式發生。
你的大多數問題將通過實施單頁來回答。
除了閱讀源,這裏是我的標籤,並在不久前從一個小書籤的幾篇文章:
我發現詹姆斯·班納特的blog是關於Django的運作信息的一個重要來源。他的書「Practical Django Projects」也是必讀文章,儘管它並不專注於內部,但你仍然可以瞭解django是如何工作的。
噢,James Bennet的博客很棒。我從那裏爲很多網頁添加了書籤。他是一位非常優秀的作家,非常清楚。 – hughdbrown 2009-08-17 13:28:07
簡單地閱讀源代碼可能有些壓倒,尤其是因爲最上面的部分有點混亂(web服務器如何將請求轉交給Django代碼)。我找到一個好辦法,開始閱讀代碼是設置一個斷點調試器在您的視圖功能:
然後點擊您的網址。當您的斷點中斷調試,檢查堆棧:
(Pdb) where
c:\abcxyzproject\django\core\management\commands\runserver.py(60)inner_run()
-> run(addr, int(port), handler)
c:\abcxyzproject\django\core\servers\basehttp.py(698)run()
-> httpd.serve_forever()
c:\python25\lib\socketserver.py(201)serve_forever()
-> self.handle_request()
c:\python25\lib\socketserver.py(222)handle_request()
-> self.process_request(request, client_address)
c:\python25\lib\socketserver.py(241)process_request()
-> self.finish_request(request, client_address)
c:\python25\lib\socketserver.py(254)finish_request()
-> self.RequestHandlerClass(request, client_address, self)
c:\abcxyzproject\django\core\servers\basehttp.py(560)__init__()
-> BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
c:\python25\lib\socketserver.py(522)__init__()
-> self.handle()
c:\abcxyzproject\django\core\servers\basehttp.py(605)handle()
-> handler.run(self.server.get_app())
c:\abcxyzproject\django\core\servers\basehttp.py(279)run()
-> self.result = application(self.environ, self.start_response)
c:\abcxyzproject\django\core\servers\basehttp.py(651)__call__()
-> return self.application(environ, start_response)
c:\abcxyzproject\django\core\handlers\wsgi.py(241)__call__()
-> response = self.get_response(request)
c:\abcxyzproject\django\core\handlers\base.py(92)get_response()
-> response = callback(request, *callback_args, **callback_kwargs)
> c:\abcxyzproject\abcxyz\helpers\views.py(118)time()
-> return HttpResponse(
(Pdb)
現在你可以看到的路徑從Web服務器到您的視圖功能最深的部分摘要。使用「up」命令向上移動堆棧,使用「list」和「print」命令檢查這些堆棧幀中的代碼和變量。
當你看到源代碼時,你看到了什麼? – 2009-08-17 09:49:59