关于后台有数据,前台得不到数据的BUG

问题的来源详情:

    当我在实现将Windows的Django项目通过远程仓库克隆到(git clone 网址)LINUX系统下运行的时候报的错误!在报错之前,我已经将所有的环境,安装包进行了pip list > requirements 进行了安装,也就是说,排除了系统配置错误的可能。

功能缺陷详情:

    具体实现的是省市县三级联动查询,我通过打断点检查到后端的数据可以正常发送到前端,可是通过前端的短信却检查不到由数据接收过来,无论我怎么重启前端,都无法接收。

分析概况:

    由于后端的省市县三级联动,前端是通过redis缓存进行的拿取,具体视图代码如下:

    

from rest_framework.viewsets import ReadOnlyModelViewSet
from rest_framework_extensions.cache.mixins import CacheResponseMixin

from .models import Area
from . import serializers
# Create your views here.

# 请求城市或区县数据--GET /areas/(?P\d+)/
class AreasViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
    # 指定要输出的数据来自哪个查询集
    # queryset = Area.objects.all()
    pagination_class = None

    def get_queryset(self):
        # 根据请求的行为,过滤不同的行为的序列化器需要的数据
        if self.action == 'list':
            # parent = None 代表请求数据是省级数据
            return Area.objects.filter(parent=None)
        else:
            return Area.objects.all()

    # 指定序列化器
    # serializer_class = "序列化器"
    def get_serializer_class(self):
        # 根据请求的行为指定不同的序列化器
        if self.action == "list":
            return serializers.AreaSerializer
        else:
            return serializers.SubAreaSerializer

序列化器代码如下:

from rest_framework import serializers

from .models import Area


class AreaSerializer(serializers.ModelSerializer):
    # 行政区划验证数据 序列化---没有参数的传递,所以没有接收的必要
    class Meta:
        model = Area
        fields = ("id", "name")


class SubAreaSerializer(serializers.ModelSerializer):
    # 子行政区划信息序列化器
    subs = AreaSerializer(many=True, read_only=True)
       # subs 是模型类定义的外键名称  related_name='subs'

    class Meta:
        model = Area
        fields = ("id", "name", "subs")

settings中DRF缓存的配置:

# DRF扩展
REST_FRAMEWORK_EXTENSIONS = {
    # 缓存时间
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
    # 缓存存储
    'DEFAULT_USE_CACHE': 'default',
}
 
  

问题刨析:

    由于配置了rest_framework的缓存功能,from rest_framework_extensions.cache.mixins import CacheResponseMixin

CacheResponseMixin适用于和action==list  和 action == retrieve 的俩个方法配合ReadOnlyModelViewSet, 来使用。

    当我查看redis库中的数据的时候,我要缓存的数据并没有缓存到里面,但是后端确实返回了数据,可是前端是从redis库中获取的redis数据,相关代码如下:

mounted: function(){
    axios.get(this.host + '/areas/', {
            responseType: 'json'
        })
        .then(response => {
            this.provinces = response.data;
        })
        .catch(error => {
            alert(error.response.data);
        });

当我通过对redis对应的0号库进行flushdb清除后,一切问题就解决了。








你可能感兴趣的:(关于后台有数据,前台得不到数据的BUG)