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

Django中使用request.POST.get无法获取请求对象POST数据

问题原因
  • 数据读取方式错误:你提交的是application/json格式的请求体,Django原生的request.POST仅支持解析表单格式(application/x-www-form-urlencoded、multipart/form-data)的提交数据,无法读取JSON格式的负载。加上你使用了DRF的@api_view装饰器,此时传入视图的是DRF封装后的Request对象,其提供的request.data属性才是统一接收JSON、表单等各类请求体数据的正确入口。
  • 参数名不匹配:你提交的请求数据里支付方式字段名是paymentMethod_id,后端代码中取值用的键名是payment_method_id,命名不一致也会导致对应字段取到空值。
修复方法

将取值逻辑从request.POST替换为request.data,同时对齐前后端的参数命名即可,修正后的视图代码如下:

@csrf_exempt
@api_view(['POST'])
def save_stripe_info(request):
    email = request.data.get("email")
    # 注意和前端传的字段名paymentMethod_id保持一致
    payment_method_id = request.data.get("paymentMethod_id")
    print('email is', email)
    print('payment method', payment_method_id)

    customer = stripe.Customer.create(
        email=email,
        payment_method=payment_method_id
    )
    return Response(status=status.HTTP_200_OK, data={
        'message': 'Success',
        'data': {'customer_id': customer.id}
    })

可选优化:如果要遵循Python常用的下划线命名规范,也可以不修改后端代码,直接把前端提交的JSON字段名改为payment_method_id,保持两边命名统一即可。另外DRF本身已经内置了适配API请求的CSRF校验逻辑,非特殊场景不需要额外添加@csrf_exempt装饰器,可以按需移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:18:26