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

使用Redux+Django时点击产品跳转出现500错误求助

问题排查与解决

核心问题分析

你的500错误大概率出在views.py的getProduct函数里,主要有两个可能的原因:

1. 主键字段不匹配

Django模型默认主键字段是id,如果你的Product模型没有手动将主键设置为_id,那么Product.objects.get(_id=pk)会因为字段不存在抛出错误,直接触发500响应。

2. 未捕获对象不存在异常

即使主键字段正确,当请求的产品ID在数据库中不存在时,get()方法会抛出Product.DoesNotExist异常,同样会导致500错误,因为没有对异常进行处理。

修改后的views.py代码

from django.shortcuts import render
from django.http import JsonResponse
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status  # 新增:用于返回标准状态码

from .models import Product
from .products import products
from .serializers import ProductSerializer

# Create your views here.

@api_view(['GET'])
def getRoutes(request):
    routes = [
        '/api/products/',
        '/api/products/create/',

        '/api/products/upload/',

        '/api/products/<id>/reviews/',

        '/api/products/top/',
        '/api/products/<id>',

        '/api/products/delete/<id>/',
        '/api/products/<update>/<id>/'
    ]
    return Response(routes)

@api_view(['GET'])
def getProducts(request):
    products = Product.objects.all()
    serializer = ProductSerializer(products, many=True)
    return Response(serializer.data)

@api_view(['GET'])
def getProduct(request, pk):
    try:
        # 若模型默认主键为id则使用此写法,若自定义了_id为主键则改回_id=pk
        product = Product.objects.get(id=pk)
        serializer = ProductSerializer(product, many=False)
        return Response(serializer.data)
    except Product.DoesNotExist:
        # 捕获不存在异常,返回404状态码和明确错误信息
        return Response({"detail": "产品不存在"}, status=status.HTTP_404_NOT_FOUND)

额外检查项

  • 确认Product模型结构:如果确实自定义了主键为_id,保持_id=pk即可,但需确保模型中有该字段定义,示例:
    class Product(models.Model):
        _id = models.AutoField(primary_key=True)
        # 其他业务字段...
    
  • 前端会自动捕获后端返回的错误信息,在页面上显示对应提示,无需修改前端代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:53:24