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

Django+Vue.js实现删除按钮调用接口返回500错误排查求助

Django+Vue删除功能触发500错误排查方案

你代码里存在3个大概率直接触发500错误的显性问题,按优先级修复即可:

  • 路由参数和视图函数形参名不匹配:urls.py中定义的路径参数是individualtestzone_id,视图函数接收的形参写的是individualtestzones_id,多了一个s,Django无法完成参数映射会直接抛出异常。
  • 模型反向查询写法错误:Django中外键反向查询的默认属性名为模型名小写_set,除非你在TestCategory关联User的外键字段上显式设置了related_name='TestCategories',否则request.user.TestCategories会直接抛出属性不存在的错误。
  • 裸用.get()查询无异常捕获:如果传入的ID不存在、或者对应记录不属于当前登录用户,.get()会直接抛出DoesNotExist异常,没有捕获逻辑就会直接返回500。

标准排查步骤

  • 首先看Django服务启动的控制台输出:所有500错误的完整错误栈都会直接打印在运行日志里,具体哪行代码出问题、报什么错写得非常清楚,是Django开发排错的第一入口,不需要盲目猜问题。
  • 先修正参数名不匹配的问题,把视图函数的形参改成和路由完全一致的individualtestzone_id。
  • 修正关联查询写法,不确定反向关联名的话直接从TestCategory模型层面做过滤,不要硬写user对象的关联属性,避免属性名错误。
  • 给查询逻辑加判空和异常处理,不要直接调用.get()后就执行删除。

修正后的参考代码

后端视图代码

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from .models import TestCategory

@csrf_exempt
def api_delete_test(request, individualtestzone_id):
    # 按ID和所属用户查询待删除记录,注意把外键字段名替换成你模型里实际的字段
    target_record = TestCategory.objects.filter(
        pk=individualtestzone_id,
        user=request.user
    ).first()
    
    if not target_record:
        return JsonResponse({'success': False, 'msg': '记录不存在或无删除权限'}, status=400)
    
    target_record.delete()
    return JsonResponse({'success': True})

前端请求代码

deleteTest() {
    // 发请求前先校验ID有效性
    if (!this.TestCategory_id) {
        console.error('待删除记录ID为空')
        return
    }
    axios.post(`/app/api/testzone_delete/${this.TestCategory_id}/`)
        .then((response) => {
            console.log(response)
            this.showDialog = false
            // 删除成功后记得刷新列表数据,否则前端页面不会同步更新
        })
        .catch((error) => {
            console.log(error)
        })
}

注意:@csrf_exempt仅适合开发阶段临时调试用,正式环境请配置正确的CSRF校验逻辑,避免接口被跨站请求伪造攻击。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:27:34