From d9621d61c3cd0aa980e505f5797fa2ddea02366b Mon Sep 17 00:00:00 2001 From: xianfuxing Date: Fri, 11 Sep 2020 11:36:27 +0800 Subject: [PATCH] =?UTF-8?q?#=20=E4=BC=98=E5=8C=96model=20cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/counter/api/serializers.py | 49 ++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/apps/counter/api/serializers.py b/apps/counter/api/serializers.py index 3c42bbf..2df8fbf 100644 --- a/apps/counter/api/serializers.py +++ b/apps/counter/api/serializers.py @@ -26,23 +26,34 @@ def get_vol(device_id, cur_vol): def get_latest(device_id): latest_key = 'device_latest_{}'.format(device_id) latest = cache.get(latest_key) - if not latest: - latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0] - cache.set(latest_key, latest, 60 * 10) - return latest + if latest: + return latest + latest = DeviceCount.objects.filter(device_id=device_id).order_by('-data_time')[0] + s = DeviceCountBaseSerializer(latest) + data = s.data + cache.set(latest_key, data, 60 * 10) + return data def get_device(device_id): device_key = 'device_lon_{}'.format(device_id) device = cache.get(device_key) - if not device: - qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time') - if qs.count() > 0: - device = qs.first() - cache.set(device_key, device, 60 * 10) - else: - return None - return device + if device: + return device + qs = DeviceCount.objects.filter(~Q(longitude=0), device_id=device_id).order_by('-data_time') + if qs.count() == 0: + return None + device = qs.first() + s = DeviceCountBaseSerializer(device) + data = s.data + cache.set(device_key, data, 60 * 10) + return data + + +class DeviceCountBaseSerializer(serializers.ModelSerializer): + class Meta: + model = DeviceCount + fields = '__all__' class DeviceCountSerializer(serializers.ModelSerializer): @@ -160,19 +171,19 @@ class DeviceInfoSerializer(serializers.ModelSerializer): except IndexError: self.latest = None if self.latest: - return self.latest.count + return self.latest['count'] return 0 def get_signal(self, obj): if self.latest: - return self.latest.csq + return self.latest['csq'] return 0 def get_energy(self, obj): if self.latest: - if float(self.latest.vol) <= 100: - return '{}{}'.format(round(float(self.latest.vol), 1), '%') - return get_vol(obj.device_id, self.latest.vol) + if float(self.latest['vol']) <= 100: + return '{}{}'.format(round(float(self.latest['vol']), 1), '%') + return get_vol(obj.device_id, self.latest['vol']) return 0 def get_coordinate(self, obj): @@ -184,12 +195,12 @@ class DeviceInfoSerializer(serializers.ModelSerializer): # query = DeviceCount.objects.filter(~Q(longitude=0), device_id=obj.device_id).order_by('-data_time') device = get_device(obj.device_id) if device: - return [device.longitude, device.latitude] + return [device['longitude'], device['latitude']] return None def get_time(self, obj): if self.latest: - return self.latest.data_time.strftime('%Y-%m-%d %H:%M:%S') + return self.latest['data_time'].replace('T', ' ').replace('Z', '') return None