3.4 URL 路由与视图


3.4 URL 路由与视图

本节摘要:URL 路由把"地址"映射到"处理函数"。本节讲清 urls.py 的写法、视图函数的三种返回(页面、JSON、重定向)、路径参数与查询参数的处理,以及"URL 是接口设计"的核心理解。

先说结论

阅读完本节,你应当能够:

  1. 配置 URL 路由
  2. 编写视图函数
  3. 返回不同响应
  4. 处理请求参数
  5. 理解 URL 设计

一、问题与直觉

"访问 /hello 为什么显示内容?"——因为 urls.py 里写了映射:路径 /hello → 视图函数 hello。路由是"地址簿",视图是"处理员"。配置一个路径、写一个函数,页面就出来了。

二、核心原理

路由视图的分工:

2.1 路由与视图

# urls.py from django.urls import path from . import views urlpatterns = [ path("hello/", views.hello), path("users/<int:pk>/", views.user_detail), ]
# views.py def hello(request): return HttpResponse("Hello, Django!") def user_detail(request, pk): return JsonResponse({"id": pk, "name": "张三"})

三、工程实践要点

3.1 三种返回

返回 场景
HttpResponse 文本/页面
JsonResponse API 数据
redirect 跳转

💡 关键直觉:URL 是接口的"门牌号"——路径设计(/users/1 而非 /getUserById)本身就是 RESTful 实践。先设计 URL,再写视图。

3.2 参数处理

参数 写法 例子
路径参数 int:pk /users/1
查询参数 request.GET ?page=1

⚠️ 常见坑:路径参数类型不声明。不写 int:pk 而写 ,参数会当字符串处理——声明类型(int/str)让代码更严谨。

温故知新

  • 要点一:路由 = 路径到函数的映射
  • 要点二:三种返回——页面、JSON、跳转
  • 要点三:URL 是接口设计
  • 要点四:路径参数声明类型
  • 要点五:先设计 URL 再写视图
  • 要点六:路由视图是 Django 的"门面"

接口会写了,下一节接数据——数据库与 ORM。

常见疑问

Q1:路由(URLconf)为什么重要?

因为 URL 是用户(或前端)访问应用的唯一入口,路由配置就是"地址到处理函数的映射表"。路由设计得好,接口自然清晰易用;路由混乱,访问路径毫无规律,前端和后端就要反复对接口。实践原则:先设计好 URL 结构,再写视图。比如用户相关的接口统一用 /users/ 开头,id 用路径参数 /users/1/,语义明确。

Q2:路径参数和查询参数怎么区分?

路径参数是 URL 路径里的一部分:/users/1/ 里的 1,适合定位单个资源;查询参数在问号后面:/users/?page=2 里的 page=2,适合筛选、分页。Django 里路径参数在路由里用尖括号声明(比如 int:pk),查询参数在视图里通过 request.GET 读取。两者的选型原则和第 2 章讲的一致:定位用路径参数,筛选用查询参数。

Q3:视图函数为什么必须接收 request 参数?

因为 request 对象装着本次请求的所有信息:路径、方法(GET/POST)、请求头、查询参数、请求体、用户会话等。视图从 request 里读输入,处理后通过返回值产生输出。它是请求在 Django 里的"档案袋"。理解了 request,你就理解了"视图是处理请求的函数"这句话——每次请求进来,框架构造一个 request 对象传给视图,视图用完后返回响应。

Q4:HttpResponse、JsonResponse、redirect 分别什么时候用?

HttpResponse 返回一段文本或 HTML(比如普通页面、文本接口);JsonResponse 返回 JSON 数据(前后端分离的 API 首选);redirect 是 302 跳转(比如登录后跳到首页)。判断依据是"你要返回什么给调用方":数据给前端解析用 JsonResponse,页面给浏览器渲染用 HttpResponse,要求浏览器跳到别处用 redirect。

工程实践要点

动手建议:把路由和视图练熟,用三种返回类型各写一个接口:一个返回纯文本,一个返回 JSON(可以查数据库),一个做重定向。然后分别用浏览器和接口测试工具访问,观察响应内容区别。再尝试定义带路径参数的路由(比如 /users/int:pk/),访问不同 id 观察参数是否正确传入。路由和视图是 Django 接口开发的门面,这块练扎实,后面接数据、接后台都顺理成章。

实战演练:玩转路由与视图

本节练习的目标,是把路由配置和视图返回练熟。步骤如下:

第一步,配置基础路由。把"首页"路径映射到一个返回欢迎文本的视图。访问该路径,看到文本。验收标准:路径、视图、文本三者对应无误。

第二步,配置带参数的路由。定义一条形如 /articles/3 的路径,把数字部分作为路径参数传给视图,视图返回"你访问的文章编号是 3"。分别访问不同编号,观察结果随之变化。验收标准:路径参数正确传递。

第三步,返回 JSON 数据。写一个视图,返回一个字典结构的数据(比如用户名、年龄)。访问后确认响应是 JSON 格式。验收标准:浏览器或接口工具能看到 JSON。

第四步,使用查询参数。写一个视图,从请求对象里读取查询参数(比如 page),把它的值返回。访问带问号参数的路径,观察取值。验收标准:查询参数正确读取。

第五步,做重定向。写一个视图,访问它时跳转到首页。访问测试,确认浏览器地址栏跳转。验收标准:跳转行为符合预期。

第六步,故意写错。把路径参数类型声明去掉,或者把路由顺序搞乱,观察行为变化或报错,理解"类型声明"和"路由顺序"的作用。修复后再确认正常。验收标准:你能从现象中解释原因。

六步走完,路由和视图的常见玩法你就都练过了。之后写任何 Django 接口,都是在这套基础上组合。

一句话记忆

路由是门牌号,视图是处理员,参数是传话的纸条。路径参数、查询参数、JSON 返回、重定向都亲手试一遍,路由视图这块就扎实了。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U