| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- 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, HistoryDayData
- 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")
- daydata = DayData.objects.filter(province=province, city=city, district=district)
- if daydata:
- cityid = daydata.first().cityid
- else:
- msg = f"地区:{district} 取不到,使用 {province} {city} 取"
- print(msg)
- daydata = DayData.objects.filter(province=province, city=city)
- if daydata:
- cityid = city.first().cityid
- else:
- daydata = DayData.objects.filter(province=province)
- if daydata:
- cityid = daydata.first().cityid
- return Response({"msg": "暂无数据", "code": 500})
- # 去历史表中查询数据
- try:
- history_data = HistoryDayData.objects.get(cityid=cityid, timestamp=int(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):
- data = request.data
- timestamp = data.get("timestamp")
- province = data.get("province")
- city = data.get("city")
- district = data.get("district")
- address = DayData.objects.filter(province=province, city=city, district=district)
- cityid = None
- if address:
- cityid = address.first().cityid
- else:
- address = DayData.objects.filter(province=province, city=city)
- if address:
- cityid = address.first().cityid
- else:
- address = DayData.objects.filter(province=province)
- if address:
- cityid = address.first().cityid
- if cityid:
- data = HistoryDayData.objects.filter(cityid=int(cityid)).filter(addtime__gte=timestamp)[:7]
- return Response(
- {
- "data": [item.content for item in data],
- "cityid": cityid,
- "province": province,
- "city": city,
- "district": district
- }
- )
- else:
- return Response({"msg": "暂无数据", "code": 500})
|