HTTP 请求传递数据的 4 条“高速公路”
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 场景都能秒定位数据入口。
- 点赞
- 收藏
- 关注作者
评论(0)