Django 学习笔记(第1篇)|请求篇:理解 request 对象,前端传参、后端接收

大家好,这是我 Django 学习日记的第一篇。作为正在学习前后端分离的开发者,我发现 ** 请求(request)** 是绕不开、也最容易混淆的知识点。

这篇我就把自己学到的、用到的 request 全部整理出来,讲清楚 request 到底是什么、有哪些参数、分别怎么用,适合和我一样正在入门的同学看。

一、request 到底是什么?

简单一句话:request 是前端传给后端的所有信息的集合。

可以把它理解成一个快递包裹

  • 里面有前端发过来的数据
  • 有请求方式(GET/POST/PUT/DELETE)
  • 有请求头(token、设备信息)
  • 有客户端 IP、请求路径等

只要前端发起请求,Django 就会把所有内容打包成一个 request 对象,自动传给视图。

不管是函数视图还是 DRF 的 APIView,第一个参数永远是 request:

python

# 函数视图 def demo_view(request): pass # DRF 类视图 class DemoView(APIView): def post(self, request): pass

request 是前后端交互的入口,也是后端开发的起点。


二、request 最常用、最核心的属性

下面这些是我做小程序时每天都在用的属性,建议直接记牢。

1. request.method —— 请求方式

作用:告诉后端,前端这次请求想干什么。

常见值:

  • GET:查询、获取数据(列表、详情、搜索)
  • POST:提交、新增数据(登录、注册、上传)
  • PUT:修改数据
  • DELETE:删除数据

(上面是一些常用请求,并非所有请求)

示例:

python

运行

if request.method == 'GET': return Response({"msg": "查询操作"}) if request.method == 'POST': return Response({"msg": "提交操作"})

2. request.data —— 接收前端 JSON 数据(最重要)

这是前后端分离、小程序开发必用的属性。

前端(小程序 /axios)传 JSON:

json

{ "phone": "13800138000", "password": "123456" }

后端接收:

python

运行

phone = request.data.get('phone') password = request.data.get('password')

适用场景:

  • 登录、注册
  • 提交表单
  • 上传图片
  • 所有 JSON 格式参数

注意:只有 DRF(Django REST Framework)才有 request.data。


3. request.query_params —— 接收 GET 查询参数

前端在 URL 后面带参数:

plaintext

http://127.0.0.1:8000/api/list/?page=1&size=10&keyword=茶叶 

后端获取:

python

page = request.query_params.get('page') size = request.query_params.get('size') keyword = request.query_params.get('keyword')

适用场景:

  • 列表分页
  • 筛选
  • 搜索
  • 查询条件

4. request.headers —— 请求头

前端在请求头里带信息,比如 token:

js

header: { 'token': 'abcd1234xyz', 'content-type': 'application/json' }

后端获取:

python

运行

token = request.headers.get('token')

常用场景:

  • 用户登录验证
  • 权限判断
  • 设备标识

5. request.path —— 当前请求路径

python

运行

print(request.path) # 输出示例:/api/farmer/login/ 

可以用来做日志、权限、接口判断。


6. request.META —— 客户端原始信息

最常用的是获取用户 IP

python

运行

ip = request.META.get('REMOTE_ADDR')

三、原生 Django VS DRF 的 request 区别(必看)

这是我一开始最容易搞混的地方:

原生 Django(不使用 DRF)

  • request.GET:获取 GET 参数
  • request.POST:获取表单参数
  • 不能直接读取 JSON

DRF(前后端分离)

  • request.data:统一接收 JSON、表单、文件                                                      (eg:serializer = UserSerializer(data=request.data))
  • request.query_params:获取 URL 查询参数
  • 更适合小程序、Vue、React 等前端项目.

补充:给序列化器传参时,前端提交的核心数据用 data=request.data;若需传递额外参数(如请求者信息、当前用户),需用 context={"request": request},序列化器中通过 self.context.get("request") 获取。


四、最实用总结:前端怎么传,后端怎么接?

表格

前端传参方式后端获取方式典型场景
GET 查询参数request.query_params列表、分页、搜索
POST JSONrequest.data登录、注册、提交
请求头 tokenrequest.headers登录验证
文件上传request.FILES / request.data图片识别、上传

五、实战小例子:登录接口

前端(小程序):

js

wx.request({ url: 'http://127.0.0.1:8000/api/farmer/login/', method: 'POST', data: { phone: '13800138000', password: '123456' } })

后端(Django DRF):

python

运行

from rest_framework.views import APIView from rest_framework.response import Response class LoginView(APIView): def post(self, request): # 从 request 中获取参数 phone = request.data.get('phone') pwd = request.data.get('password') # 简单判断 if not phone or not pwd: return Response({"msg": "手机号或密码不能为空"}, status=400) return Response({ "code": 200, "msg": "登录成功", "data": {"phone": phone} })

六、本篇学习小结

  1. request 是前端传给后端的所有信息
  2. 做小程序 / 前后端分离,重点掌握:
    • request.method 请求方式
    • request.data 接收 JSON
    • request.query_params 接收 GET 参数
    • request.headers 请求头
  3. GET 用来查,POST 用来提交
  4. 所有前端参数,都在 request 里面

这就是我第一篇 Django 学习日记,如有缺漏或错误,欢迎指正!!!

下一篇我会继续整理路由 urls.py 的知识点,看看请求是怎么找到对应视图的~

Could not load content