You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django应用中无法获取POST请求数据的原因是什么?

解决Dio POST请求在Django端request.POST为空的问题

问题原因

  • Dio默认会将data参数中的Map序列化为JSON格式发送,请求头Content-Type为application/json
  • Django的request.POST仅支持解析application/x-www-form-urlencoded(表单编码)格式的请求数据,无法直接读取JSON格式内容,因此打印出空字典

解决方案

方案1:修改Flutter端,发送表单编码格式的数据

让Dio发送Django能直接解析的表单格式数据,有两种实现方式:

方式A:使用FormData构造请求数据

void signup(context) async {
  Dio dio = Dio();
  // 将Map转为FormData
  final formData = FormData.fromMap(getData());
  final response = await dio.post(
    'http://192.168.0.101:8000/signup/',
    data: formData,
  );
  debugPrint(response.toString());
}

方式B:手动设置表单编码请求头

void signup(context) async {
  Dio dio = Dio();
  final response = await dio.post(
    'http://192.168.0.101:8000/signup/',
    data: getData(),
    options: Options(
      contentType: Headers.formUrlEncodedContentType,
    ),
  );
  debugPrint(response.toString());
}

两种方式都能让Django的request.POST正常获取到请求数据。


方案2:修改Django端,解析JSON请求体

如果希望保持Flutter端发送JSON格式,可在Django端直接解析请求体中的JSON数据:

import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def signup(request):
    if request.method == 'POST':
        # 解析JSON格式的请求体
        data = json.loads(request.body)
        print(data)
        return HttpResponse('Hello, world!')

内容的提问来源于stack exchange,提问作者Ayush Bajracharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:15