Django URL路由匹配过程是如何精确对应到相应视图函数的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1795个文字,预计阅读时间需要8分钟。
在Django中处理一个请求,当用户请求Django站点的某个页面时,Django系统会执行以下Python代码来决定使用哪个视图函数:
Django确定使用根URLconf模块中的配置。
通常,这是通过`ROOT_URLCONF`设置的值来指定的。
1 Django 如何处理一个请求
当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码使用的算法:
Django 确定使用根 URLconf 模块。通常,这是 ROOT_URLCONF 设置的值(即 settings 中的 ROOT_URLCONF),但如果传入 HttpRequest 对象拥有 urlconf 属性(通过中间件设置),它的值将被用来代替 ROOT_URLCONF 设置。可以在 django/core/handlers/base.py 发现该逻辑。
class BaseHandler: ... def _get_response(self, request): ... if hasattr(request, 'urlconf'): urlconf = request.urlconf set_urlconf(urlconf) resolver = get_resolver(urlconf) else: resolver = get_resolver()
Django 加载该 Python 模块并寻找可用的 urlpatterns 。
本文共计1795个文字,预计阅读时间需要8分钟。
在Django中处理一个请求,当用户请求Django站点的某个页面时,Django系统会执行以下Python代码来决定使用哪个视图函数:
Django确定使用根URLconf模块中的配置。
通常,这是通过`ROOT_URLCONF`设置的值来指定的。
1 Django 如何处理一个请求
当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码使用的算法:
Django 确定使用根 URLconf 模块。通常,这是 ROOT_URLCONF 设置的值(即 settings 中的 ROOT_URLCONF),但如果传入 HttpRequest 对象拥有 urlconf 属性(通过中间件设置),它的值将被用来代替 ROOT_URLCONF 设置。可以在 django/core/handlers/base.py 发现该逻辑。
class BaseHandler: ... def _get_response(self, request): ... if hasattr(request, 'urlconf'): urlconf = request.urlconf set_urlconf(urlconf) resolver = get_resolver(urlconf) else: resolver = get_resolver()
Django 加载该 Python 模块并寻找可用的 urlpatterns 。

