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 的知识点,看看请求是怎么找到对应视图的~

Read more

【JavaEE01-前端部分】从零入门HTML:从基础到实战,手把手教你写第一个网页

【JavaEE01-前端部分】从零入门HTML:从基础到实战,手把手教你写第一个网页

✅ 本文适合编程新手,用最通俗的语言讲清HTML核心知识点,搭配原创示例代码,看完就能上手写网页! 一、认识HTML:网页的“骨架语言” 1.1 什么是HTML? HTML的全称是HyperText Markup Language(超文本标记语言),你可以把它理解为网页的骨架 —— 没有它,网页就是一片空白。 * 超文本:不只是单纯的文字,还能包含图片、视频、链接,甚至是可点击的按钮,让内容“活”起来。比如你刷到的带图片的公众号文章、带跳转链接的电商页面,都是“超文本”的体现。 * 标记语言:用提前定义好的“标签”来告诉浏览器“这段内容该怎么显示”。就像你在Word里选中文字点“加粗”,Word会给文字加“加粗标记”;HTML里的标签,就是给网页内容加的“显示规则”。 1.2 HTML标签:网页的“最小指令单元” HTML的核心就是标签,

前端状态管理比较:选择适合你的状态管理方案

前端状态管理比较:选择适合你的状态管理方案 毒舌时刻 状态管理?听起来就像是前端工程师为了显得自己很高级而特意发明的复杂概念。你以为随便找个状态管理库就能解决所有问题?别做梦了!到时候你会发现,状态管理库本身就是个问题。 你以为Redux是万能的?别天真了!Redux的样板代码多到让你崩溃,调试起来也非常麻烦。还有那些所谓的轻量级状态管理库,看起来简单,用起来却各种问题。 为什么你需要这个 1. 复杂状态管理:当应用变得复杂时,组件间的状态共享和管理会变得非常困难,需要一个专门的状态管理方案。 2. 可预测性:良好的状态管理方案可以让状态变化变得可预测,便于调试和测试。 3. 性能优化:状态管理方案可以帮助你优化组件渲染,提高应用性能。 4. 代码组织:状态管理方案可以帮助你更好地组织代码,提高代码的可维护性。 5. 团队协作:统一的状态管理方案可以便于团队成员之间的协作,减少沟通成本。 反面教材 // 这是一个典型的状态管理混乱的例子 import React, { useState, useEffect } from 'react'; function