Django URL 的注册与请求处理流程

在学习 Django 开发时,很多同学会有这样的疑问:

浏览器发起一个请求后,Django 是如何一步步找到对应的视图函数并返回响应的?

本文将带你完整梳理 Django URL 的注册与请求处理流程,让你彻底搞清楚请求从浏览器进入到最终返回结果的全过程。


1. 请求整体处理流程

先看一个 请求执行链路图 (以访问 /hello/ 为例):

python 复制代码
浏览器 (Client)
     │
     ▼
HTTP 请求 (GET /hello/)
     │
     ▼
WSGI/ASGI Server (Gunicorn / Uvicorn)
     │
     ▼
Django Handler (WSGIHandler / ASGIHandler)
     │  调用 get_response(request)
     ▼
URL Resolver (基于 ROOT_URLCONF 的 urlpatterns)
     │
     ├─ 匹配 URLPattern: path("hello/", views.hello_view)
     ▼
视图函数 (views.hello_view)
     │  处理请求,返回 HttpResponse
     ▼
Django Handler
     │  包装成 response
     ▼
WSGI/ASGI Server
     │
     ▼
浏览器 (收到响应)

从图中可以看到,主要分为四大阶段:

  1. 请求进入服务端:浏览器发起请求,经过 WSGI/ASGI 服务器(如 Gunicorn、Uvicorn)。

  2. Django 接管请求 :Django 的 WSGIHandlerASGIHandler 处理请求,调用 get_response()

  3. URL 匹配 :Django 根据 ROOT_URLCONF 中配置的 urlpatterns,递归匹配 URLPatternURLResolver

  4. 执行视图 :找到对应的视图函数,执行逻辑并返回 HttpResponse,最终由服务器返回给浏览器。


2. URL 的注册方式

project/urls.py 中,我们通常会写:

python 复制代码
from django.urls import path, include
from . import views

urlpatterns = [
    path("hello/", views.hello_view),  # URLPattern
    path("blog/", include("blog.urls")),  # URLResolver
]
  • URLPattern

    单一的 URL → 对应一个视图函数。例如 path("hello/", views.hello_view)

  • URLResolver

    路由分发器,可以把一部分路由交给子应用。例如 include("blog.urls")


3. URL 递归匹配机制

Django 的路由匹配是 递归 的:

  • 请求 /hello/

    • urlpatterns 中直接找到 hello/views.hello_view
  • 请求 /blog/list/

    • urlpatterns 匹配到 path("blog/", include("blog.urls"))

    • 进入 blog/urls.py

    • 在子路由里找到 path("list/", views.blog_list)

这种递归设计让 Django 项目可以方便地 模块化拆分路由


4. 示例:完整执行过程

假设我们在 views.py 中写了:

python 复制代码
from django.http import HttpResponse

def hello_view(request):
    return HttpResponse("Hello Django!")

再在 urls.py 中注册:

python 复制代码
urlpatterns = [
    path("hello/", hello_view),
]

那么访问 http://127.0.0.1:8000/hello/ 时,执行过程如下:

  1. 浏览器发起请求

  2. Django Handler 接收请求

  3. URLResolver 匹配到 hello/

  4. 调用 hello_view(request)

  5. 返回 HttpResponse("Hello Django!")

  6. 浏览器展示响应内容


5. 总结

本文介绍了 Django URL 注册与请求处理的完整流程,核心要点如下:

  1. Django URLConf 由 URLPattern 和 URLResolver 组成

    • URLPattern:路由到单一视图函数

    • URLResolver:通过 include() 分发到子应用

  2. Django URL 匹配是递归的

    支持项目模块化,方便维护大型应用。

  3. 请求执行链路清晰

    浏览器请求 → WSGI/ASGI → Django Handler → URLResolver → 视图 → HttpResponse → 浏览器。

相关推荐
howard20051 天前
Django全流程实战:从项目搭建、模型操作到模板渲染与详情页跳转
django·会员显示
wxin_VXbishe2 天前
springboot居家养老管理系统-计算机毕业设计源码55953
java·c++·spring boot·python·spring·django·php
互亿无线明明2 天前
国际金融短信:如何为跨境金融业务构建稳定安全的消息通知链路?
java·python·安全·eclipse·django·virtualenv·pygame
计算机徐师兄2 天前
Python基于Django的MOOC线上课程推荐数据分析与可视化系统(附源码,文档说明)
python·数据分析·django·慕课线上课程推荐·慕课线上课程推荐可视化系统·pytho线上课程推荐可视化·线上课程推荐数据分析可视化系统
Sammyyyyy2 天前
Django 6.0 发布,新增原生任务队列与 CSP 支持
数据库·后端·python·django·sqlite·servbay
高洁012 天前
智能体大模型时代的AI革新者
人工智能·深度学习·算法·机器学习·django
JAVA+C语言2 天前
Python+Django 核心介绍
开发语言·python·django
qq_229058013 天前
运行djando项目 配置启动类 label_studio包含前后端启动方法
python·django
码界奇点3 天前
基于Python与Django的白泽自动化运维系统设计与实现
运维·python·django·毕业设计·源代码管理
计算机毕业编程指导师3 天前
【Python大数据选题】基于Spark+Django的电影评分人气数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·django·电影评分人气