rest_framework,发起retrieve请求时参数带小数点报404错误

撸代码时,需要获取某只股票的详细数据时报404错误
rest_framework,发起retrieve请求时参数带小数点报404错误_第1张图片
lookup_fields属性也没有写错。然后我试着换个字段,采用不带小数点的。就能正常获取到数据那问题就出在小数点上。
通过断点发现数据并没有到达retrieve()函数。那问题应该是出在路由层上面。
然后详细看这个404的报错内容发现以下两个相关路由
在这里插入图片描述
这两个路由都排除了小数点。那如果去掉这个排除项,是否就能正常匹配了?我去试试。
找到路由。删掉这个小数点

    def get_lookup_regex(self, viewset, lookup_prefix=''):
        base_regex = '(?P<{lookup_prefix}{lookup_url_kwarg}>{lookup_value})'
        # Use `pk` as default field, unset set.  Default regex should not
        # consume `.json` style suffixes and should break at '/' boundaries.
        lookup_field = getattr(viewset, 'lookup_field', 'pk')
        lookup_url_kwarg = getattr(viewset, 'lookup_url_kwarg', None) or lookup_field
#====================================
# 这里
        # 修改了正则。去掉了排除小数点 原来的是这样: '[^/.]+'
        lookup_value = getattr(viewset, 'lookup_value_regex', '[^/]+')
        return base_regex.format(
            lookup_prefix=lookup_prefix,
            lookup_url_kwarg=lookup_url_kwarg,
            lookup_value=lookup_value
        )

改完之后就能够正常识别了
rest_framework,发起retrieve请求时参数带小数点报404错误_第2张图片
对了 该函数在rest_framework\routers.py下

你可能感兴趣的:(Django)