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
相关产品推荐
相关产品推荐

