我很想知道Django的内部工作原理。
我想要开始的一件事是跟随我的views.py
文件中的函数向后调用链。
例如,我有一个功能
def user_page(request):
...
使用url 调用
...
url(r'^user/$', views.user_page, name='user_page'),
实际读取URL的Django代码在哪里,匹配模式并调用我的view
函数?
答案 0 :(得分:1)
首先,您有webserver / python网关的具体细节(wsgi
或fcgi
脚本等)。不管怎样,这个网关特定部分最终实现了一些django.core.handlers.base.BaseHandler
子类 - 很可能是django.core.handlers.wsgi.WSGIHandler
,它实际上是1.5.x中唯一的内置BaseHandler
子类(FWIW都是内置的开发者) server和runfcgi命令现在最终使用wsgi
)。
假设您处于此配置状态(使用WSGIHandler
这种或那种方式),真正的" django"入口点是WSGIHandler.__call__(environ, start_response)
,后者又调用self.get_response(request)
,它实际上是从BaseHandler
继承的,这是大多数调度(中间件,URL解析,视图调用等)发生的地方
答案 1 :(得分:-3)
Django实际调用设置部分来检查url模式。然后从该模式再次搜索url的相应视图函数。