HTTP 请求传递数据的 4 条“高速公路”

举报
周杰伦本人 发表于 2025/08/31 20:31:34 2025/08/31
【摘要】 HTTP 请求传递数据的 4 条“高速公路” 一、为什么要死记这 4 条路在浏览器与 Django 之间,数据就像快递包裹,必须贴上明确的“地址标签”才能送达。路由段、查询串、请求体、请求头就是 4 条官方高速公路;记不住就会“寄丢”。 二、4 条高速公路全景图 路由参数(Path Variable)URL 本身就是数据:/book/2023/08/北京Django 写法:# urls.p...

HTTP 请求传递数据的 4 条“高速公路”

一、为什么要死记这 4 条路

在浏览器与 Django 之间,数据就像快递包裹,必须贴上明确的“地址标签”才能送达。路由段、查询串、请求体、请求头就是 4 条官方高速公路;记不住就会“寄丢”。

二、4 条高速公路全景图

路由参数(Path Variable)

URL 本身就是数据:/book/2023/08/北京
Django 写法:

# urls.py
path('shop/<int:city_id>/<int:shop_id>/', views.shop_detail)

# views.py
def shop_detail(request, city_id, shop_id):
  return HttpResponse(f"城市:{city_id}, 店铺:{shop_id}")

浏览器输入

/shop/11000/11005/

立刻得到

城市:11000, 店铺:11005

京东商品详情页把 ID 嵌在路径里,换 ID即换商品。

  • 路径参数 永远 是字符串;即使声明为 int,视图接收的也是 int 型,但 URL 里是字符串形式。

  • GET 请求 可以 带请求体,只是浏览器默认把参数拼在查询串里,开发中极少这么用。

  • 如果占位符写错或漏写形参,Django 会抛出 404 或 500,调试时务必核对名称和顺序。

查询字符串(Query String)

问号后的键值对:/search?q=无人机&page=2
Django 获取:

keyword = request.GET.get('q')
page    = request.GET.get('page', 1)

如果是一个键对应多个值,可以使用getList

比如浏览器输入?order=read_count&order=comment_count

order_list = request.GET.getlist('order')  # ['read_count', 'comment_count']

百度、京东搜索框、美多商城列表分页全靠它。

请求体(Body)

• 表单:application/x-www-form-urlencoded
• JSON:application/json
Django 获取:

title = request.POST.get('title')          # 表单
data  = json.loads(request.body)           # JSON

登录、注册、发布商品时大量字段一次性塞进 body。

请求头(Header)

Cookie、Token、User-Agent 都藏在头部。

token = request.META.get('HTTP_AUTHORIZATION')

虽然使用频率低,但权限、跨域、设备识别离不开它。

三、实战

“路径放资源 ID,问号传搜索,表单/JSON 塞大对象,头部藏权限。”

这是都是
把这 4 句话背熟,90% 的 Web 场景都能秒定位数据入口。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。