فهرست منبع

Merge remote-tracking branch 'remotes/origin/locky' into test

Ansjer 2 سال پیش
والد
کامیت
848f8ef68e
2فایلهای تغییر یافته به همراه39 افزوده شده و 18 حذف شده
  1. 38 16
      Controller/DeviceConfirmRegion.py
  2. 1 2
      Model/models.py

+ 38 - 16
Controller/DeviceConfirmRegion.py

@@ -58,8 +58,8 @@ class ConfirmRegion(TemplateView):
                                      'push_api_url': 'https://push.dvema.com'})
 
 
-# 根据设备的ip返回域名和地区id
 class ConfirmRegionV2(TemplateView):
+    # 设备根据ip获取域名V2接口
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
         return super(ConfirmRegionV2, self).dispatch(*args, **kwargs)
@@ -73,46 +73,68 @@ class ConfirmRegionV2(TemplateView):
             data_dict = {'serial_number': serial_number}
             device_domain_region_qs = DeviceDomainRegionModel.objects.filter(serial_number=serial_number)
 
-            # 根据请求ip确认地区
+            # 获取ip
             request.encoding = 'utf-8'
             ip = CommonService.get_ip_address(request)
             data_dict['ip'] = ip
-            ipInfo = CommonService.getIpIpInfo(ip, 'CN')
-            country_code = ipInfo['country_code']
+
+            # 获取国家编码
+            ip_addr_qs = IPAddr.objects.filter(ip=ip).values('country_code')
+            if ip_addr_qs.exists():
+                country_code = ip_addr_qs[0]['country_code']
+            else:
+                ip_qs = IPQuery(ip)
+                country_code = ip_qs.country_id
 
             if country_code:
-                data_dict['country_name'] = ipInfo['country_name']
+                data_dict['country_code'] = country_code
                 country_qs = CountryModel.objects.filter(country_code=country_code).\
-                    values('region__api', 'region__id')
+                    values('region__api', 'region__push_api', 'region__id')
                 if country_qs.exists():
                     api = country_qs[0]['region__api']
+                    push_api = country_qs[0]['region__push_api']
                     region_id = country_qs[0]['region__id']
-                else:   # 默认返回美洲地区api
-                    api, region_id = self.get_default_api()
+                else:
+                    # 返回美洲域名
+                    data_dict['country_code'] = 'NA'
+                    api, push_api, region_id = self.get_default_api()
             else:
-                # 默认返回美洲地区api
-                api, region_id = self.get_default_api()
+                # 返回美洲域名
+                data_dict['country_code'] = 'NA'
+                api, push_api, region_id = self.get_default_api()
 
             # 更新或创建设备域名数据
-            data_dict['api'] = api
             data_dict['region_id'] = region_id
             if device_domain_region_qs.exists():
                 device_domain_region_qs.update(**data_dict)
             else:
                 device_domain_region_qs.create(**data_dict)
-            res = {'request_api_url': api, 'region_id': region_id}
+
+            # 响应数据
+            res = {
+                'request_api_url': api,
+                'push_api_url': push_api,
+                'region_id': region_id
+            }
             return response.json(0, res)
         except Exception as e:
-            print(e)
-            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            print(repr(e))
+            api, push_api, region_id = self.get_default_api()
+            res = {
+                'request_api_url': api,
+                'push_api_url': push_api,
+                'region_id': region_id
+            }
+            return response.json(0, res)
 
     # 获取区域表美洲的相关数据
     @staticmethod
     def get_default_api():
-        region_qs = RegionModel.objects.filter(continent_code='NA').values('api', 'id')
+        region_qs = RegionModel.objects.filter(continent_code='NA').values('api', 'push_api', 'id')
         api = region_qs[0]['api']
+        push_api = region_qs[0]['push_api']
         region_id = region_qs[0]['id']
-        return api, region_id
+        return api, push_api, region_id
 
 
 class Device_Region(object):

+ 1 - 2
Model/models.py

@@ -2463,8 +2463,7 @@ class DeviceDomainRegionModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='主键')
     serial_number = models.CharField(default='', max_length=9, verbose_name='序列号')
     ip = models.CharField(default='', max_length=32, verbose_name='ip')
-    country_name = models.CharField(default='', max_length=20, verbose_name='国家名')
-    api = models.CharField(default='', max_length=50, verbose_name='使用的域名')
+    country_code = models.CharField(default='', max_length=8, verbose_name='国家编码')
     region_id = models.SmallIntegerField(default=0, verbose_name='对应tb_region表id')
     add_time = models.DateTimeField(blank=True, auto_now_add=True, verbose_name='添加时间')
     update_time = models.DateTimeField(blank=True, auto_now=True, verbose_name='更新时间')