我在哪里可以获得django内部工作方式的技术手册/详细信息,即我想知道客户请求何时进入;
? 等...
Paul.G
答案 0 :(得分:12)
除了阅读消息来源之外,这里有一些我刚刚标记过的文章和书签:
我发现James Bennet的blog是关于django工作的信息的重要来源。他的书Practical Django Projects也是必读的 - 虽然它并不专注于内部,但你仍然可以了解django是如何工作的。
答案 1 :(得分:11)
“使用来源,卢克。”开源软件的优点在于您可以自己查看(和修改)代码。
答案 2 :(得分:9)
了解django内部的最简单方法是阅读一本专门为此而写的书。
阅读Pro Django。它首先为您提供了对元编程的深入理解,并演示了如何在django模型中使用它来动态创建它们。
它与许多其他python概念类似,以及django如何使用它。
答案 3 :(得分:6)
简单地阅读源可能有点压倒性,特别是因为最上面的部分有点令人困惑(web服务器如何将请求移交给Django代码)。我发现开始阅读代码的一个好方法是在视图函数中设置调试器断点:
def time(request):
import pdb; pdb.set_trace()
return HttpResponse(blah blah)
然后点击你的网址。当调试器在断点处中断时,检查堆栈:
(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”命令检查这些堆栈帧的代码和变量。
答案 4 :(得分:1)
我怀疑有关于这个主题的技术手册。它可能需要一些挖掘,但API文档和源代码是您获得可靠,最新信息的最佳选择。
答案 5 :(得分:0)
为了解释为什么事情按照他们的方式运作,文档通常会详细说明。 Django的设计目标之一是尽可能不依赖“魔法”。但是,每当Django 假设某些东西(例如,应用程序中的模板位置)时,它就会清楚地解释为什么在文档中并且它总是以可预测的方式发生。
您的大多数问题都可以通过实施单页来解答。