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

Django REST API中POST请求request.POST返回None问题求助

Django REST API POST请求无法获取参数问题

问题描述

开发Django REST API时编写了create视图,发送包含完整正确参数的POST请求时,key打印结果为None;将请求方式改为GET后,使用request.GET可正常获取参数。但该接口用于数据库写入,必须使用POST请求。

补充说明:尝试使用request.data返回空对象{},request.POST同样为空,使用Postman以form-data格式发送请求。

视图代码

@api_view(['POST'])
def create(request):
    key = request.POST.get('key')
    name = request.POST.get("name")
    email = request.POST.get("email")
    password = request.POST.get("password")
    print(key)
    if(key=='0'):
        user = Users(name=name,email=email,password=password)
        user.save()
        return Response("User Created Successfully")
    else:
        return Response("Invalid Key")

问题原因

Django REST Framework的request.POST仅支持解析application/x-www-form-urlencoded编码的请求体,而Postman中form-data格式对应的Content-Type是multipart/form-data,这种情况下request.POST无法解析参数;DRF默认已包含MultiPartParser,若request.data仍为空,需确认请求格式是否正确。

解决办法

方法1:调整Postman请求格式

将Postman的请求体格式改为x-www-form-urlencoded,此时request.POST可以正常获取参数,无需修改代码。

方法2:改用request.data获取参数

DRF的request.data兼容multipart/form-data、application/json等多种请求格式,直接替换request.POST为request.data即可:

@api_view(['POST'])
def create(request):
    key = request.data.get('key')
    name = request.data.get("name")
    email = request.data.get("email")
    password = request.data.get("password")
    print(key)
    if key == '0':
        user = Users(name=name, email=email, password=password)
        user.save()
        return Response("User Created Successfully")
    else:
        return Response("Invalid Key")

方法3:使用DRF序列化器(推荐)

遵循DRF最佳实践,用序列化器处理参数验证和模型创建,自动适配多种请求格式,同时提升代码规范性:

from rest_framework import serializers
from .models import Users

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = Users
        fields = ['name', 'email', 'password']

@api_view(['POST'])
def create(request):
    key = request.data.get('key')
    if key == '0':
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response("User Created Successfully")
        return Response(serializer.errors, status=400)
    else:
        return Response("Invalid Key", status=400)

内容的提问来源于stack exchange,提问作者Ashutosh Aswani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:25:17