关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集

很多人第一次写 Django 时,都会有一个相似的困惑:

浏览器里输入一个地址, Django 到底是怎么知道该执行哪段代码的

这一节课,核心只做一件事:把 URL → 路由 → 视图函数 → 响应 的整条链路拆开来看清楚。

理解这一条链,后面无论你写接口、做自动化测试、看线上 404,都不会再“靠猜”。

图片

 


一、URL 到底是什么?不是 Django 专属的概念

先把 Django 放一边,URL 本身是一个计算机科学里的老概念。

URL(Uniform Resource Locator),统一资源定位符。 翻译成人话就是:

浏览器地址栏里的那串东西,用来标识“某个资源在什么位置”。

你在浏览器里敲下一个地址,本质是在说:

  • 我要用什么协议

  • 去找哪台机器

  • 访问它的哪个资源

  • 顺便带点额外信息


二、把 URL 一次拆干净

一个完整的 URL,结构大致是:

图片

 

协议://host:端口/path?query#fragment

1. 协议(protocol)

协议决定了通信方式

常见的只有几个:

  • http:明文传输

  • https:加密传输

  • file:访问本地文件

在 Django 开发中,有一个非常重要的工程现实:

Django 主要关心 HTTP,HTTPS 通常交给 Nginx 处理。

也就是说:

  • Django 负责业务逻辑

  • HTTPS 的证书、加密、解密,基本不在 Django 层解决


2. host name:域名或 IP

host name 指的是:

  • 域名(如 www.xxx.com

  • 或 IP(如 127.0.0.1

开发阶段最常见的是:

127.0.0.1

在公司里,一定会变成域名。

这里有一个很多人早期模糊的点:

浏览器并不是“认识域名”,它最终只认 IP。

所以真实流程是:

  • 浏览器拿到域名

  • 通过 DNS 服务解析成 IP

  • 再去网络中找对应的那台机器


3. 端口(port)

端口是服务监听的入口

  • HTTP 默认走 80

  • HTTPS 默认走 443

当端口是默认值时,浏览器地址栏不会显示

所以:

http://xxx.com

本质等价于:

http://xxx.com:80

而像 Django 开发时常见的:

127.0.0.1:8000

是因为你监听的不是 80 端口,就必须显式写出来。


4. 路由(path):真正定位资源的关键

前面的协议、域名、端口,只是找到服务器

真正告诉服务器:

“我要你这里的哪一份资源”

靠的是 path

例如:

/news/2024/xxx/

如果服务器里没有对应的 path,结果通常只有一个:

404

这和 Django 无关,是 Web 世界的基本规则。


5. 查询字符串(query)

查询字符串是 path 后面、问号开始的部分

?key=value&key2=value2

它的作用只有一个:

向服务端传递额外信息,用来更精确地描述资源。

例如某个视频地址:

  • 视频 ID

  • 菜单类型

  • 版本号

这些参数是否有意义,完全由后端决定


6. 锚点(fragment)

锚点以 # 开头:

#section-1

它的作用是:

  • 定位到当前页面的某个位置

  • 类似书签

这是前端行为,不会发给服务器。 在 Django 后端课程里,知道它的存在即可。


三、浏览器回车后,Django 做了什么?

现在我们回到 Django。

当你在浏览器里输入一个 URL 并回车,Django 的处理流程是非常“死板且可预测”的。

第一步:找主路由文件

Django 会先去配置里找一个东西:

ROOT_URLCONF

默认指向:

项目同名目录/urls.py

也就是我们常说的主路由文件


第二步:加载 urlpatterns

Django 会加载 urls.py 里的一个变量:

urlpatterns = [
    ...
]

这是一个列表,里面存的是 Django 能接受的所有路由规则。


第三步:从上到下逐个匹配

这是一个非常关键、也非常“工程化”的点:

Django 是从上到下,顺序匹配路由的。

  • 匹配到第一个符合的

  • 立刻停止

  • 把请求交给对应的视图函数

如果整个列表都没匹配上:

返回 404

没有“智能兜底”,没有“模糊匹配”。


第四步:把请求交给视图函数

例如你配置了这样一条路由:

path("配置/2003/", views.config_2003_view)

当请求命中这条规则时:

  • Django 不再管 URL

  • 直接把请求对象交给 config_2003_view

接下来发生什么,全看你这个函数怎么写


四、视图函数:Django 里真正干活的地方

图片

 

视图函数在 Django 里,本质就是一个普通 Python 函数,但有两条硬性规则。

1. 第一个参数必须是 request

def my_view(request):
    ...

这个 request 是 Django 传进来的 HTTP 请求对象。

  • URL

  • 请求方式

  • 参数

  • 头信息

都在它里面。


2. 必须返回 HttpResponse 对象

视图函数不能随便 return 一个字符串。

正确做法是:

from django.http import HttpResponse

def my_view(request):
    return HttpResponse("hello django")

原因很简单:

Django 需要一个“标准化的 HTTP 响应对象”, 才知道怎么回给浏览器。

五、视图函数一般写在哪?

在一个标准 Django 项目里:

视图函数通常写在 views.py 文件中。

例如:

项目同名目录/
    views.py

示例:

from django.http import HttpResponse

def config_2003_view(request):
    html = "<h1>配置 2003 页面</h1>"
    return HttpResponse(html)

六、路由与视图函数如何绑定?

绑定发生在主路由文件 urls.py 中。

核心步骤只有三步:

  1. 导入视图函数

from . import views
  1. 在 urlpatterns 中写 path

path("配置/2003/", views.config_2003_view)

注意一个细节:

视图函数名后面不要加括号。

你传的是函数本身,而不是函数执行结果。

  1. 浏览器访问测试

http://127.0.0.1:8000/配置/2003/

如果页面能正常显示内容,说明:

  • URL → 路由

  • 路由 → 视图函数

  • 视图函数 → 响应

整条链路已经打通。


七、把这条链路记成一张“心智模型”

到这里,其实可以用一句话总结 Django 的基础运行逻辑:

浏览器发 URL → Django 找主路由 → 顺序匹配 urlpatterns → 命中后交给视图函数 → 视图函数返回 HttpResponse → 浏览器展示结果

这条链路一旦建立起来,后面:

  • 接口参数从哪来

  • 为什么 404

  • 为什么视图函数没被执行

  • 自动化测试该 mock 哪一层

都会变得非常清晰。


URL 和视图,是 Django 的“最小闭环”

很多框架概念学起来感觉很重,但 URL + 视图函数,其实是 Django 的最小工作单元

只要你掌握了:

  • URL 的组成

  • Django 路由的匹配机制

  • 视图函数的输入与输出约束

你就已经能写出一个完整、可运行、可测试的 Web 功能

后面无论是模板、ORM、中间件, 都只是这条主链路上的“增强模块”。

下一步,才是真正开始把 Django 当工程来用。

关于我们

霍格沃兹测试开发学社,隶属于 测吧(北京)科技有限公司,是一个面向软件测试爱好者的技术交流社区。

学社围绕现代软件测试工程体系展开,内容涵盖软件测试入门、自动化测试、性能测试、接口测试、测试开发、全栈测试,以及人工智能测试与 AI 在测试工程中的应用实践

我们关注测试工程能力的系统化建设,包括 Python 自动化测试、Java 自动化测试、Web 与 App 自动化、持续集成与质量体系建设,同时探索 AI 驱动的测试设计、用例生成、自动化执行与质量分析方法,沉淀可复用、可落地的测试开发工程经验。

在技术社区与工程实践之外,学社还参与测试工程人才培养体系建设,面向高校提供测试实训平台与实践支持,组织开展 “火焰杯” 软件测试相关技术赛事,并探索以能力为导向的人才培养模式,包括高校学员先学习、就业后付款的实践路径。

同时,学社结合真实行业需求,为在职测试工程师与高潜学员提供名企大厂 1v1 私教服务,用于个性化能力提升与工程实践指导。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐