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

Django传递字符串参数不生效,Postman请求接口返回404如何解决?

问题根因

你返回404的核心原因是urls.py中定义的路由正则规则和你传入的分类参数格式不匹配:
你当前路由正则为r'photoByCategory/(?:(?P<category>\d+)/)?$',其中\d+规则仅支持匹配数字类型的参数,但你请求时传入的是字符串类型的nature,正则无法匹配该路径,因此直接返回404。

修复方案

场景1:需要传入分类名称字符串调用接口

按照以下两步修改代码:

  1. 修改urls.py的正则规则
    将匹配数字的\d+替换为匹配字符串的规则:
# 分类仅包含字母、数字、下划线时使用
re_path(r'photoByCategory/(?:(?P<category>\w+)/)?$', views.photo_by_categorie, name='photo_by_categorie'),

# 分类包含特殊字符(如横杠、中文等)时使用,匹配所有非斜杠字符
re_path(r'photoByCategory/(?:(?P<category>[^/]+)/)?$', views.photo_by_categorie, name='photo_by_categorie'),
  1. 优化视图参数逻辑(可选,避免潜在判断异常)
    将视图的category默认值从布尔值False修改为None,同时补充无参数时的返回逻辑,避免请求无响应报错:
@api_view(['GET'])
@permission_classes((permissions.IsAuthenticated,))
def photo_by_categorie(request, category=None):
    if request.method == 'GET':
        if category:
            photo_by_cat = Photo.objects.filter(category=category)
            serializer = PhotoSerializer(photo_by_cat, many=True)
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response({"msg": "请传入分类参数"}, status=status.HTTP_400_BAD_REQUEST)

修改完成后重启Django服务,再次请求localhost:8000/photoByCategory/nature/即可正常响应。

场景2:分类为外键字段,原设计传入分类ID调用接口

不需要修改路由规则,直接在Postman中传入数字类型的分类ID请求即可,例如localhost:8000/photoByCategory/1/。

提示:如果Photo模型的category是关联分类表的外键,且你希望支持通过分类名称查询,需要调整视图的过滤逻辑为Photo.objects.filter(category__name=category),其中name为分类表中存储分类名称的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:36:02