| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | # -*- coding: utf-8 -*-"""@Author : peng@Time : 2023-8-18 10:45:46@File :WeatherControl.py"""from Ansjer.config import LOGGERimport timefrom django.views import Viewfrom Object.IPWeatherObject import WeatherInfofrom Model.models import UidSetModel, CityInformationfrom Object.ResponseObject import ResponseObjectfrom Object.RedisObject import RedisObjectclass WeatherView(View):    def get(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation')        return self.validation(request.GET, operation, request)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation')        return self.validation(request.POST, operation, request)    def validation(self, request_dict, operation, request):        lang = request_dict.get('lang', 'en')        response = ResponseObject(lang)        if operation == 'get':  # 获取天气            return self.get_weather(request_dict, response)        else:            return response.json(414)    @staticmethod    def get_weather(request_dict, response):        """        获取天气        @param request_dict: 请求参数        @request_dict uid: 设备uid        @param response: 响应对象        @return: response        """        uid = request_dict.get('uid')        if not uid:            return response.json(444, 'uid')        uid_set_qs = UidSetModel.objects.filter(uid=uid).values('tb_city_information_id')        if not uid_set_qs.exists():            return response.json(173)        redis_obj = RedisObject()        city_id = uid_set_qs[0]['tb_city_information_id']        try:            weather = redis_obj.get_data('city_id_{}_weather'.format(city_id))            if weather:                temp, humidity = weather.split('/')            else:                city_obj = WeatherInfo(city_id)                temp, humidity = city_obj.get_city_weather()                if temp and humidity:                    redis_obj.set_ex_data('city_id_{}_weather'.format(city_id), '{}/{}'.format(temp, humidity), 600)            if not all([temp, humidity]):                return response.json(10, '获取天气失败')            return response.json(0, {'temp': temp, 'humidity': humidity})        except Exception as e:            print(e)            return response.json(500)
 |