chenjunkai vor 6 Jahren
Ursprung
Commit
daa5903491
6 geänderte Dateien mit 103 neuen und 50 gelöschten Zeilen
  1. 12 18
      Ansjer/test/osssigput.py
  2. 3 23
      Ansjer/test/test.py
  3. 2 0
      Ansjer/urls.py
  4. 65 4
      Controller/EquipmentStatus.py
  5. 20 4
      Model/models.py
  6. 1 1
      Object/TokenObject.py

+ 12 - 18
Ansjer/test/osssigput.py

@@ -26,18 +26,7 @@ http://test.dvema.com/cloudVod/getSts?uidToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1N
 '''
 
 # tokenss ={"arn": "acs:ram::1901342792446414:role/stsoss/P2WNGJRD2EHA5EU9111A", "expire": "3600", "Expiration": "2019-02-25T07:03:40Z", "endpoint": "oss-cn-shenzhen.aliyuncs.com", "ip": "120.237.157.181", "storage": "P2WNGJRD2EHA5EU9111A/vod1/", "AccessKeySecret": "ErbGnFyPWPcfNBPRkcpZBJNBVpsX73q2u5vgJYownBQd", "SecurityToken": "CAIS9AJ1q6Ft5B2yfSjIr4vWBsLMjLBI0q2haFD/pTUgb8RvqL3pqDz2IHFIf3NhAe0bv/kzm2lX7/YYlr1LEaBjam7+QZFdzr0K3D7wOtOYkpRIRwn3ctj3d1KIAjvXgeV+CoeQFaELE5XAQlTAkTAJkNmeXD6+XlujHISUgJp8FLo+VRW5ajw0TbUzIRB5+vcHKVzbN/umLnyShXHLXmZlvgdghER166m03re4iHzkgUb91/UeqqnoP5GgdLMMBppkVMqv1+EELsiH2SVLuR9R7/U03u4W8jHZud3ERGEL3DOpEdD4qPBPBVJUW/ljQvdt6+b7maQ/+JaX9eXW0z9BMftYSD+lIImr25n/H/6zPdsYbcSCWROUiIjJbMKq9Vp5PjRCZFpoA4NwciYrVUZzG2uGdvH7oQzwD139G/Tf4sYfyoFoyljkx92OKmWUTq+RuSRiYc5gNBl5b0NLjDG9LfZZKlwWaT18G62SVp5jypvDLGYoZWYagAGOO+MMAjzgPaDMySC/exBy3d1Lp0iCGLeY6HYgMhel1YjuC2+vaPxvIaTgp4n9+QmQi+i1wtRhCVk8bwY0YCgNO5nZds4E0J5g7xTfnMfm30FaRs5s3rJohwEwp4cnsxgqsDGwwvqpOAefRd/hscpw3frgyPEVG6b6XRY4na+xpA==", "AccessKeyId": "STS.NHcMxxaoieoJjvNA5ucKCGxBJ", "bucket_name": "cnvod1", "code": 0}
-tokenss ={
-    "AccessKeyId": "STS.NJ4VCFAz9oBgrJReTZY6XvH7Y",
-    "AccessKeySecret": "D4qAk17C86LK2iCMCAE9tutqCaYgq2C3qSqSrBtmchC6",
-    "SecurityToken": "CAISxQJ1q6Ft5B2yfSjIr4mBHfnyrKUY2ICMcGzjgVQPVbl0mY2cuzz2IHFIf3NhAe0bv/kzm2lX7/YYlrEqFsMeFBSVNZYoss0MqFjxO9KY4JztteRcTFEt9arWWXDBx8b3T7jTtbq/E67fiDmm+wZ3xbzlD2TAO3WuLZyOj7N+c90TRXPWRDFaBdBQVEIAzcgBLinpKOqKOBzniXaydE1zoVhQhGdy9amYyM+R4Qakoz+c8OIOoJnrKZWJdtRlOIwFM+24x+trbKHMom0yqhFB7/Vxl7cWu2WF7NiFDB4IvkndYrKFqoA3cFYiP/NqQ/Yd96ikzaU6mJSKxtyukEoXYrAPD3iBGNn8+qaeRrP1bOReXK3gJnHA3uqIMpTIqA4+aRoZTlgbJ4F7eyctVE1xFm6Ddfb3okqkeRu4TLOewAe9TB+wD42DGoABjQpaMZGUvae/bvy0EmQlSQ8L6Gr/YCAO/9YWpshdRfWlEGQJefim4Bt4XqGvcjGytN393toRKhIghRu9ja2lhy5km09Su/zVPwNp+Yqh8/aDfuhtnZdLnn7MrRPhpqnLP9ITTFsRbG793YAeqROl4iePN75xrd3SX0xd0W4EuQQ=",
-    "Expiration": "2019-05-10T07:14:41Z",
-    "expire": 3600,
-    "endpoint": "oss-cn-shenzhen.aliyuncs.com",
-    "bucket_name": "apg",
-    "arn": "acs:ram::1901342792446414:role/stsoss/154390905041313800138000",
-    "code": 0,
-    "storage": "154390905041313800138000/uid_preview/"
-  }
+tokenss ={"AccessKeyId": "STS.NKKRWdsfkMyHA9rz9SN6s26sA", "endpoint": "oss-cn-shenzhen.aliyuncs.com", "AccessKeySecret": "G7CRveV6XpcBnVkRd9qVxM8c6TkEzA4N3wdNmxTzHyQQ", "arn": "acs:ram::1901342792446414:role/stsoss/151564262337939513800138001", "bucket_name": "apg", "storage": "151564262337939513800138001/uid_preview/", "SecurityToken": "CAISrwN1q6Ft5B2yfSjIr4j+Ge3QnrlK+rujQx/DnjkGQrlf3fPYozz2IHFIf3NhAe0bv/kzm2lX7/YYlrIqFsYYGxCeM5ErtcsGqlL8OtGR45Tstuxc0MT90Z0w592+jqHoeOzcYI736p7PAgm2Y0YRrJL+cTK9JXzHVbSClZ9gaPkOQwC8dkAoLdxKJwxk2pd4UHzKLqSVLwLNiGjdB1YKwg1nkjFT5KCy3sC74BjTh0GYr+gOvNbeL4SDZcthN4sFcbXT5uFtcbfb2yN98gVD8LwM7JZJ4jDapNqQcR8zpxyNKLjT6cY9bl07NKEiFOkd8aGhy6Ei5LaIzNumkEcQZLoFC3yGH9D4mJKGatjLW/89cbHkQTWvtvmEKpjytS49fHsfL3kkUtE9K3h2e2VOLTbBMf2D+UvWRQ2hRqOZy9tBs/xPwk7v4MCBKnWWXrydylx4AJInaF4yPBNktg6IMI1+Kl0UKgg7XenEF9kvMkwH9ZmF51OCCndSqVhMpOD7av/svaQSVJ7yRJou0/BGNcgd6TpyEgmmFu7x0xhNJDZ/L61Ky672Io8ZYyIABSVLChqAAUU8EA+LN1EXtGazb+yfWncE/l3wUXsW0qT7EU+m2YXBKt+yzl8Ls9xicDj1NMIyy1KrtHXOM8iHTGiNC0U1Ulnwl6yprCW2snc7q2CiaAjzTIRkPjgGd+gA6hO2neSifA0bfhkhitLb8HEq+g32zpCYcdeMigawRWBrNdoCsGqu", "code": 0, "expire": 3600, "Expiration": "2019-05-13T09:42:52Z"}
 # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
 
 # 使用临时token中的认证信息初始化StsAuth实例。
@@ -67,11 +56,16 @@ bucket = oss2.Bucket(auth, tokenss['endpoint'], tokenss['bucket_name'])
 # # 上传一个字符串。
 # bucket.delete_object('a-3.txt')
 # exit()
-patht = tokenss['storage'] + 'asfsdafsdafdsa'
-print(patht)
-print(endpoint)
-print(bucket.put_object(patht, b'ddd'))
-# bucket.put_object('FTSLL8HM437Z38WU111A/vod4/1234.txt', b'12345646',headers)
+print(tokenss['storage'])
+res = bucket.list_objects(prefix=tokenss['storage'])
+print(res)
 exit()
-res = bucket.get_object('ddd.txt')
+
+# patht = tokenss['storage'] + 'asfsdafsdafdsa'
+# print(patht)
+# print(endpoint)
+# print(bucket.put_object(patht, b'ddd'))
+# # bucket.put_object('FTSLL8HM437Z38WU111A/vod4/1234.txt', b'12345646',headers)
+# exit()
+res = bucket.get_object('151564262337939513800138001/uid_preview/asfsdafsdafdsa')
 print(res.read())

+ 3 - 23
Ansjer/test/test.py

@@ -1,24 +1,4 @@
-#!/usr/bin/env python3.3
-from pyawk import PyAwk, p
-class LTSVParser(PyAwk):
-    def begin(self):
-        self.FS = '\t'
-        self.count = 0
+import requests
 
-    def action(self, S):
-        if not p(S[0], r'status:200'):
-            self.count += 1
-            self.print('----------')
-            d = {}
-            for elem in S[1:]:
-                key, value = elem.split(':', 1)
-                d[key] = value
-            self.print(d)
-
-    def end(self):
-        self.print('----------')
-        self.print('Total:{}'.format(self.NR))
-        self.print('Matched:{}'.format(self.count))
-
-if __name__ == '__main__':
-    LTSVParser().run()
+res = requests.put('http://apg.oss-cn-shenzhen.aliyuncs.com/uid_preview%2F3%2F3.jpeg?OSSAccessKeyId=LTAIyMkGfEdogyL9&Expires=1557744966&Signature=Ci7lMDQlzQ5LPU9wMf9D%2BdYyUfk%3D',data='1')
+print(res)

+ 2 - 0
Ansjer/urls.py

@@ -134,6 +134,8 @@ urlpatterns = [
 
     # 用户反馈信息
     url(r'^feedback/(?P<operation>.*)$', FeedBackInfo.FeedBackInfoView.as_view()),
+    url(r'^uid/preview$', EquipmentStatus.addUIDPreview),
+
     # 新的设备接口
     path('Test', Test.Test.as_view()),
     # 路由加参数参考

+ 65 - 4
Controller/EquipmentStatus.py

@@ -17,10 +17,13 @@ from Ansjer.config import BASE_DIR
 from django.http import JsonResponse
 from django.views.decorators.csrf import csrf_exempt
 import ipdb
-
-from Model.models import Device_Info
+from Object.TokenObject import TokenObject
+from Model.models import Device_Info, UID_Preview
 from Object.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
+import time
+import oss2
+from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
 
 '''
 http://192.168.136.45:8077/device/online?UID=C2887N9EBS87ZAT1111A
@@ -106,8 +109,7 @@ def getTZ(request):
         uid = c.decode('utf-8')
         if len(uid) == 20:
             print(uid)
-            db = ipdb.City(BASE_DIR + "/DB/mydata4vipday2.ipdb")
-            info = db.find_map(ip, lang)
+            info = CommonService.getIpIpInfo(ip=ip, lang=lang)
             # tz = info.timezone
             # of = info.utc_offset
             # from var_dump import var_dump
@@ -117,3 +119,62 @@ def getTZ(request):
             return JsonResponse(status=200, data={'code': 404, 'msg': '令牌错误'})
     else:
         return JsonResponse(status=200, data={'code': 444, 'msg': '接口参数错误 etk'})
+
+
+# 设备预览图
+def addUIDPreview(request):
+    request.encoding = 'utf-8'
+    response = ResponseObject()
+    if request.method == 'GET':
+        request_dict = request.GET
+    elif request.method == 'POST':
+        request_dict = request.POST
+    else:
+        return response.json(414)
+    channel = request_dict.get('channel')
+    uid = request_dict.get('channel')
+    token = request_dict.get('token')
+    if all([token, uid, channel]):
+        tko = TokenObject(token)
+        if tko.code == 0:
+            nowTime = int(time.time())
+            upqs = UID_Preview.objects.filter(uid=uid, channel=channel)
+            if upqs.exists():
+                try:
+                    is_update = upqs.update(updTime=nowTime)
+                except Exception as e:
+                    print(repr(e))
+                    return response.json(177)
+                else:
+                    if is_update:
+                        auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+                        bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+                        obj = 'uid_preview/{uid}/{channel}.jpeg'.format(uid=uid, channel=channel)
+                        # 设置此签名URL在60秒内有效。
+                        url = bucket.sign_url('PUT', obj, 7200)
+                        return response.json(0, url)
+                    else:
+                        return response.json(177)
+            else:
+                create_data = {
+                    'addTime': nowTime,
+                    'updTime': nowTime,
+                    'uid': uid,
+                    'channel': channel
+                }
+                try:
+                    UID_Preview.objects.create(**create_data)
+                except Exception as e:
+                    print(repr(e))
+                    return response.json(178)
+                else:
+                    auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+                    bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+                    obj = 'uid_preview/{uid}/{channel}.jpeg'.format(uid=uid, channel=channel)
+                    # 设置此签名URL在60秒内有效。
+                    url = bucket.sign_url('PUT', obj, 7200)
+                    return response.json(0, url)
+        else:
+            return response.json(tko.code)
+    else:
+        return response.json(444)

+ 20 - 4
Model/models.py

@@ -352,7 +352,7 @@ class Feedback_Info(models.Model):
     content = models.TextField(blank=True, null=True, verbose_name=u'反馈描述')
     addTime = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间/反馈时间', auto_now_add=True)
     updTime = models.DateTimeField(blank=True, null=True, verbose_name=u'更新时间', auto_now=True)
-    urls = models.TextField( blank=True, max_length=300, default='', verbose_name=u'存储多张图片的路径')
+    urls = models.TextField(blank=True, max_length=300, default='', verbose_name=u'存储多张图片的路径')
 
     def __str__(self):
         return self.id
@@ -363,16 +363,18 @@ class Feedback_Info(models.Model):
         verbose_name_plural = verbose_name
         ordering = ('id',)
 
+
 class User_Brand(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     # 关联用户
-    userID = models.ForeignKey( Device_User,to_field='userID',on_delete=models.CASCADE)
+    userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
     deviceSupplier = models.CharField(max_length=32, default='', verbose_name='(必填)设备供应商 string  (例:华为、小米...)')
     deviceModel = models.CharField(max_length=32, default='', verbose_name='(必填)设备型号 string @mock=HM NOTE 1TD')
     osType = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统名称 string @mock=Android')
     osVersion = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统版本号 string @mock=4.0')
-    ip = models.CharField(blank=True,max_length=20,default='',verbose_name=u'区域ip')
-    addTime = models.IntegerField( verbose_name='添加时间', default=0)
+    ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'区域ip')
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+
     def __str__(self):
         return self.id
 
@@ -602,3 +604,17 @@ class UID_App(models.Model):
         verbose_name = u'设备关联APP表'
         verbose_name_plural = verbose_name
         ordering = ('id',)
+
+
+class UID_Preview(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    uid = models.CharField(default='', max_length=20, verbose_name='设备UID')
+    channel = models.SmallIntegerField(verbose_name=u'通道号', default=0)
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    updTime = models.IntegerField(verbose_name='更新时间', default=0)
+
+    class Meta:
+        db_table = 'uid_preview'
+        verbose_name = '设备预览图'
+        verbose_name_plural = verbose_name
+        ordering = ('id',)

+ 1 - 1
Object/TokenObject.py

@@ -21,7 +21,7 @@ class TokenObject:
 
     def __init__(self, token=None):
         if token == 'local':
-            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NTg3NzU5MDcsInVzZXIiOiIxMzgwMDEzODAwMSIsInVzZXJJRCI6IjE1MTU2NDI2MjMzNzkzOTUxMzgwMDEzODAwMSIsImxhbmciOiJlbiIsIm1fY29kZSI6IjEyMzQxMzI0MzIxNCJ9.6OZMsGUpzhtRZSIpONaZaueqss787RBLC6w_Toe-3RI'
+            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NjAzMjQ5MDJ9.aVvJaXQwNX3AM_q-x2rsghEc118FIj38TT275fU5MSM'
         if token == 'test':
             token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJ1c2VySUQiOiIxNTE1NjQyNjIzMzc5Mzk1MTM4MDAxMzgwMDEiLCJsYW5nIjoiZW4iLCJleHAiOjE1NTI2MTIxOTF9.sO8BtSclN6B-qwqNmYWbICatHYEtyMdoqzZ0hcOSsmg'
         self.token = token