import traceback from rest_framework.views import APIView from rest_framework.response import Response from django.contrib.auth import authenticate from apps.Weather.models import DayData, ServerDayData, AddressInfo, HistoryData from apps.UserApp.models import MyUser import logging import json province_dict = { "11": '北京市', "12": '天津市', "13": '河北省', "14": '山西省', "15": '内蒙古自治区', "21": '辽宁省', "22": '吉林省', "23": '黑龙江省', "31": '上海市', "32": '江苏省', "33": '浙江省', "34": '安徽省', "35": '福建省', "36": '江西省', "37": '山东省', "41": '河南省', "42": '湖北省', "43": '湖南省', "44": '广东省', "45": '广西壮族自治区', "46": '海南省', "50": '重庆市', "51": '四川省', "52": '贵州省', "53": '云南省', "54": '西藏自治区', "61": '陕西省', "62": '甘肃省', "63": '青海省', "64": '宁夏回族自治区', "65": '新疆维吾尔自治区' } logging.basicConfig(level=logging.DEBUG, filename='/data/logs/weather.log', filemode='w', format='%(asctime)s - %(levelname)s - %(message)s') class GetWeather(APIView): def post(self, request): # 对外提供天气接口,需要提供省,市,区(县) try: data = request.data cityid = data.get("cityid", "") province = data.get("province") city = data.get("city") district = data.get("district") day_type = data.get("day_type") username = data.get("username") password = data.get("password") user = authenticate(username=username, password=password) if not user: return Response({"msg":"认证失败", "code": 400}) table = DayData if day_type == "1" else ServerDayData if cityid: logging.warning(f"{cityid}: 使用cityid查询") query = table.objects.filter(cityid=cityid) if query: temp = query.first().content.replace("'", '"') try: result = json.loads(temp) except json.decoder.JSONDecodeError: result = eval(temp) return Response({"content": result, "msg": "success", "code": 200}) else: return Response({"msg": "请联系管理员排查", "code": 500}) else: logging.warning("使用province,city,distinct查询") query = table.objects.filter(province=province, city=city, district=district) if not query: # 省市正确 query = table.objects.filter(province=province, city=city) if not query: # 省正确 query = table.objects.filter(province=province) if query: try: temp = query.first() temp = (temp.content).replace("'", '"') try: result = json.loads(temp) except json.decoder.JSONDecodeError: result = eval(temp) return Response({"content": result, "msg": "success", "code": 200}) except Exception as e: logging.info(f"cityid: {cityid} province:{province} city:{city} district: {district} {traceback.format_exc()}") return Response({"msg": "请联系管理员", "code": "50001"}) else: return Response({"content": "", "msg": "success", "code": 500}) except Exception as e: logging.info(f"cityid: {cityid} province:{province} city:{city} district: {district} {traceback.format_exc()}") return Response({"msg": "请联系管理员", "code": "50001"}) class HistoryAPIView(APIView): def post(self, request): data = request.data timestamp = data.get("timestamp") province = data.get("province") city = data.get("city") district = data.get("district") district = AddressInfo.objects.filter(province=province, city=city, district=district) if district: cityid = district.first().cityid else: msg = f"地区:{district} 取不到,使用 {province} {city} 取" logging.warning(msg) city = AddressInfo.objects.filter(province=province, city=city) if city: cityid = city.first().cityid else: return Response({"msg": "暂无数据", "code": 500}) # 去历史表中查询数据 try: history_data = HistoryData.objects.get(cityid=cityid, timestamp=timestamp) content = history_data.content low_heigh = json.loads(content) return Response( { "data": [low_heigh["yWendu"], low_heigh["bWendu"]], "province": province, "city": city, "district": district } ) except Exception as e: return Response({"msg": "暂无指定城市数据", "code": 500}) class TestAPI(APIView): def post(self, request): return Response({"test": 111})