views.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import traceback
  2. from rest_framework.views import APIView
  3. from rest_framework.response import Response
  4. from django.contrib.auth import authenticate
  5. from apps.Weather.models import DayData, ServerDayData, AddressInfo, HistoryData
  6. from apps.UserApp.models import MyUser
  7. import logging
  8. import json
  9. province_dict = {
  10. "11": '北京市',
  11. "12": '天津市',
  12. "13": '河北省',
  13. "14": '山西省',
  14. "15": '内蒙古自治区',
  15. "21": '辽宁省',
  16. "22": '吉林省',
  17. "23": '黑龙江省',
  18. "31": '上海市',
  19. "32": '江苏省',
  20. "33": '浙江省',
  21. "34": '安徽省',
  22. "35": '福建省',
  23. "36": '江西省',
  24. "37": '山东省',
  25. "41": '河南省',
  26. "42": '湖北省',
  27. "43": '湖南省',
  28. "44": '广东省',
  29. "45": '广西壮族自治区',
  30. "46": '海南省',
  31. "50": '重庆市',
  32. "51": '四川省',
  33. "52": '贵州省',
  34. "53": '云南省',
  35. "54": '西藏自治区',
  36. "61": '陕西省',
  37. "62": '甘肃省',
  38. "63": '青海省',
  39. "64": '宁夏回族自治区',
  40. "65": '新疆维吾尔自治区'
  41. }
  42. logging.basicConfig(level=logging.DEBUG, filename='/data/logs/weather.log', filemode='w',
  43. format='%(asctime)s - %(levelname)s - %(message)s')
  44. class GetWeather(APIView):
  45. def post(self, request):
  46. # 对外提供天气接口,需要提供省,市,区(县)
  47. try:
  48. data = request.data
  49. cityid = data.get("cityid", "")
  50. province = data.get("province")
  51. city = data.get("city")
  52. district = data.get("district")
  53. day_type = data.get("day_type")
  54. username = data.get("username")
  55. password = data.get("password")
  56. user = authenticate(username=username, password=password)
  57. if not user:
  58. return Response({"msg":"认证失败", "code": 400})
  59. table = DayData if day_type == "1" else ServerDayData
  60. if cityid:
  61. logging.warning(f"{cityid}: 使用cityid查询")
  62. query = table.objects.filter(cityid=cityid)
  63. if query:
  64. temp = query.first().content.replace("'", '"')
  65. try:
  66. result = json.loads(temp)
  67. except json.decoder.JSONDecodeError:
  68. result = eval(temp)
  69. return Response({"content": result, "msg": "success", "code": 200})
  70. else:
  71. return Response({"msg": "请联系管理员排查", "code": 500})
  72. else:
  73. logging.warning("使用province,city,distinct查询")
  74. query = table.objects.filter(province=province, city=city, district=district)
  75. if not query:
  76. # 省市正确
  77. query = table.objects.filter(province=province, city=city)
  78. if not query:
  79. # 省正确
  80. query = table.objects.filter(province=province)
  81. if query:
  82. try:
  83. temp = query.first()
  84. temp = (temp.content).replace("'", '"')
  85. try:
  86. result = json.loads(temp)
  87. except json.decoder.JSONDecodeError:
  88. result = eval(temp)
  89. return Response({"content": result, "msg": "success", "code": 200})
  90. except Exception as e:
  91. logging.info(f"cityid: {cityid} province:{province} city:{city} district: {district} {traceback.format_exc()}")
  92. return Response({"msg": "请联系管理员", "code": "50001"})
  93. else:
  94. return Response({"content": "", "msg": "success", "code": 500})
  95. except Exception as e:
  96. logging.info(f"cityid: {cityid} province:{province} city:{city} district: {district} {traceback.format_exc()}")
  97. return Response({"msg": "请联系管理员", "code": "50001"})
  98. class HistoryAPIView(APIView):
  99. def post(self, request):
  100. data = request.data
  101. timestamp = data.get("timestamp")
  102. province = data.get("province")
  103. city = data.get("city")
  104. district = data.get("district")
  105. district = AddressInfo.objects.filter(province=province, city=city, district=district)
  106. if district:
  107. cityid = district.first().cityid
  108. else:
  109. msg = f"地区:{district} 取不到,使用 {province} {city} 取"
  110. logging.warning(msg)
  111. city = AddressInfo.objects.filter(province=province, city=city)
  112. if city:
  113. cityid = city.first().cityid
  114. else:
  115. return Response({"msg": "暂无数据", "code": 500})
  116. # 去历史表中查询数据
  117. try:
  118. history_data = HistoryData.objects.get(cityid=cityid, timestamp=timestamp)
  119. content = history_data.content
  120. low_heigh = json.loads(content)
  121. return Response(
  122. {
  123. "data": [low_heigh["yWendu"], low_heigh["bWendu"]],
  124. "province": province,
  125. "city": city,
  126. "district": district
  127. }
  128. )
  129. except Exception as e:
  130. return Response({"msg": "暂无指定城市数据", "code": 500})
  131. class TestAPI(APIView):
  132. def post(self, request):
  133. return Response({"test": 111})