Django处理POST请求中JSON数据的两种实现方式

栗子
栗子
发布时间:2026-10-13| 5人浏览过
原创

本文介绍Django框架中处理POST请求发送的JSON格式数据的两种常见方法。第一种通过接收字符串并进行Base64解码后解析;第二种直接读取request.body并转换为JSON对象。文中包含完整的Python代码示例,展示如何从请求中提取数据并存储至MongoDB数据库,适用于后端接口开发参考。

接收Base64编码的JSON字符串

在Django视图函数中,若前端通过POST提交的是经过处理的字符串数据,后端需先获取该字段值。例如,从request.POST中获取名为'msg'的参数,该参数通常包含经过Base64编码的JSON字符串。随后,使用base64.b64decode对字符串进行解码,并指定utf-8编码格式将其转换为普通字符串,最后通过json.loads解析为Python字典对象,以便后续业务逻辑处理。


def subscription(request):
  msg = request.POST.get('msg')
  # tel_no = request.POST.get('tel_no')
  # email = request.POST.get('email')
  # ico_id = request.POST.get('ico_id')

  data = base64.b64decode(msg)
  data = data.decode('utf-8')
  data = json.loads(data)
  client = pymongo.MongoClient(host = 'localhost',port = 27017)
  db = client.users
  my_set = db.user
  if 'ico_id' not in data.keys():
    return HttpResponse(json.dumps({"result_code":1}))

  result_code = my_set.insert({"tel_no":data.get('tel_no'),"email":data.get('email'),"ico_id":data.get('ico_id'),'date':datetime.datetime.now()})
  return HttpResponse(json.dumps({"result_code":0}))

直接解析request.body中的JSON数据

当前端直接发送JSON格式数据时,Django视图可通过request.body属性直接读取原始请求体。由于request.body返回的是字节流,需先调用decode()方法将其转换为字符串。若前端发送的JSON字符串中单引号与双引号混用导致标准JSON解析失败,可先用replace("'", "\"")替换单引号为双引号,再使用json.loads解析为字典。接着,通过.get('id')获取特定字段值,完成数据提取。


def selectedico(request):

  if request.method == 'POST':
    web_id = json.loads(request.body.decode().replace("'", "\"")).get('id')
    client = pymongo.MongoClient(host = 'localhost',port = 27017)
    db = client.webdata
    my_set = db.webchinadata
    values = []
  #print(web_id)
    print(request.body.decode())
  
    for val in my_set.find():
    # value = value.decode('utf-8')
    # val = json.loads(value)
      val["_id"] = str(val["_id"])
      val["date"] = str(val["date"])
      discount = (''.join(val["discounts"])).split('\n')
      dis = [x.strip(' ') for x in discount if x != '']
      val["discounts"] = dis
      val["accept_coins"] = val["accept_coins"].split(",")
      details = (''.join(val["details"])).replace('\n','')
      val["details"] = details
    #print(val["_id"])
      if val["_id"] == web_id:
        values.append(val)

    return HttpResponse(json.dumps(values,ensure_ascii=False),content_type="application/json;charset=utf-8")

上述两种方法分别适用于不同场景下的数据接收需求,开发者可根据前端传参方式选择合适的数据解析策略。希望这些代码示例能帮助开发者更高效地处理Django中的POST请求数据,欢迎收藏并参考使用。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。