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

解决Django Rest Framework缺失key引发的报错问题

解决Django REST Framework删除端点的KeyError问题

当前代码直接通过request.data["delete"]访问键,当键不存在时会抛出KeyError导致程序崩溃,无法进入错误分支。可以通过以下方式修复:

核心修复点

  • 用字典的get()方法安全获取键值,避免KeyError
  • 同时检查email参数的存在性,防止后续操作报错
  • 调整错误状态码为更合适的400 Bad Request(原401适用于权限验证失败,此处属于请求参数错误)

修改后的代码

class Leads(APIView):
    @staticmethod
    def delete(request):
        # 安全获取delete参数,键不存在时返回默认值False
        delete_flag = request.data.get('delete', False)
        # 获取email参数,键不存在时返回None
        email = request.data.get('email')
        
        if delete_flag is True and email:
            # 执行数据库删除,返回删除记录数
            deleted_count = Lead.objects.filter(email=email).delete()[0]
            # 执行ActiveCampaign删除操作
            lead = LeadHelper(email=email)
            lead.delete_from_activecampaign()
            return Response({
                "message": f"成功删除 {deleted_count} 条记录",
                "deleted_email": email
            }, status=status.HTTP_200_OK)
        else:
            # 构造明确的错误提示
            error_msg = []
            if not delete_flag:
                error_msg.append("需要传入 'delete': true 才能执行删除操作")
            if not email:
                error_msg.append("缺失必填参数 'email'")
            
            payload = {
                "message": "; ".join(error_msg)
            }
            return Response(payload, status=status.HTTP_400_BAD_REQUEST)

代码说明

  1. 安全参数获取:request.data.get()方法在目标键不存在时不会抛出异常,而是返回指定默认值(或None),避免程序崩溃。
  2. 双重条件校验:只有同时满足delete为True且email存在时,才执行删除逻辑,避免无效或危险操作。
  3. 响应信息优化:删除成功后返回具体删除数量和目标邮箱,错误时明确指出缺失的参数,方便调用方调试。
  4. 状态码修正:使用400 BAD REQUEST更贴合请求参数错误的场景,原401 UNAUTHORIZED语义用于身份验证失败,不符合当前需求。

内容的提问来源于stack exchange,提问作者Matheus Tenório

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:25:12