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

Django REST Framework出现'NoneType' object is not subscriptable报错如何解决

核心问题说明

报错触发的位置是process_payment函数内的link=response['data']['link']这行,说明你调用外部接口拿到的response是None,不存在['data']属性,和你猜想的cleaned_data没有直接关联。


具体修复步骤

  • 第一步:补全process_payment函数的请求异常判断,避免接口调用失败时返回空值:
# 你的process_payment函数修改示例
import requests
def process_payment(name, email, amount, phone):
    try:
        # 替换为你实际的支付接口请求逻辑
        resp = requests.post(
            "支付接口URL",
            json={"name": name, "email": email, "amount": amount, "phone": phone},
            timeout=10
        )
        # 先判断请求状态码正常再解析返回值
        if resp.status_code == 200:
            resp_json = resp.json()
            # 多级取值用get避免KeyError
            return resp_json.get("data", {}).get("link")
    except Exception as e:
        # 可自行添加日志打印错误原因排查问题
        print(f"支付接口调用失败: {str(e)}")
    return None
  • 第二步:如果你需要实现类似Django Form中cleaned_data的参数校验能力,在DRF中使用序列化器完成即可,同时可以避免参数缺失导致的支付接口调用失败:
    首先定义参数校验序列化器:
from rest_framework import serializers

class PaymentParamsSerializer(serializers.Serializer):
    name = serializers.CharField(required=True, max_length=100)
    email = serializers.EmailField(required=True)
    amount = serializers.DecimalField(required=True, max_digits=10, decimal_places=2)
    phone = serializers.CharField(required=True, max_length=11)

然后修改你的视图逻辑:

@api_view(['GET', "POST"])
def home(request):
    if request.method == 'POST':     
        ser = PaymentParamsSerializer(data=request.data)
        # 校验不通过直接返回400错误,无需后续执行
        ser.is_valid(raise_exception=True)
        # ser.validated_data就是校验后的安全参数,等价于你说的cleaned_data
        params = ser.validated_data
        payment_link = process_payment(**params)
        if not payment_link:
            return Response({"error": "支付链接生成失败"}, status=500)
        return redirect(str(payment_link))
    else:    
        return Response({"Homepage": "Payment"})
  • 第三步:如果还是存在问题,可以在调用process_payment前打印传入的四个参数,确认参数符合支付接口的要求,排除参数传错导致的接口返回异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:06:07