Преглед изворни кода

Merge branch 'pzb' of http://192.168.136.45:3000/SERVER/AnsjerServer into pzb

# Conflicts:
#	Controller/UserBrandController.py
pzb пре 6 година
родитељ
комит
5f54403d6d

+ 1 - 0
.gitignore

@@ -12,3 +12,4 @@
 /Ansjer/test/__pycache__
 /Ansjer/test/__init__.py
 /sdk_install
+/DB/mydata4vipday2.ipdb

+ 64 - 0
Ansjer/file/apns_pem/apns-dev-test.pem

@@ -0,0 +1,64 @@
+Bag Attributes
+    friendlyName: Apple Development IOS Push Services: com.ansjer.loocamccloud
+    localKeyID: 88 F8 4C E3 C3 6E E8 8E 07 D4 F6 FD 04 7E 79 A4 93 4F 7E 82 
+subject=/UID=com.ansjer.loocamccloud/CN=Apple Development IOS Push Services: com.ansjer.loocamccloud/OU=JCHT67XT68/C=US
+issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIFkzCCBHugAwIBAgIIYwaKq6f2DAEwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTkwNjI2MDU1MzM5WhcNMjAwNjI1MDU1MzM5WjCBkjEnMCUGCgmSJomT8ixk
+AQEMF2NvbS5hbnNqZXIubG9vY2FtY2Nsb3VkMUUwQwYDVQQDDDxBcHBsZSBEZXZl
+bG9wbWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmFuc2plci5sb29jYW1jY2xv
+dWQxEzARBgNVBAsMCkpDSFQ2N1hUNjgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjdrw+8hKwbPbgsK8z3WhOX6ZlWE1xB3EK8M
+GmVdluRco4/utE31gheJXmRCTGrOVyoLwls2zmlzv51KNG5/h0M9ltN4JIJMvlWx
+au0EJp6PM/cVTBbJ2ssY8SdaW2nxUoWcbiYVcBs2WXqzQYtXs3GH5nFYWH47LQ4w
+bMqBUnhzPdqHLT4u+CVXCK/LcRpnMT9Vepve8vLchakgpGRXOOWta5Yg5G4KgQKT
+j62IpHhBmGD+2Vq14odVsb0GmlFCHHVYqQ88a/0cL9pb0wqQnzxdeyguAtfvK3VM
+4o+dGshx7/U9fpwtmTeVfpsRbejy0UVLavQ/qO1OyVxJgKxmywIDAQABo4IB5TCC
+AeEwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCC
+AQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2
+DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNz
+dW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQg
+dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kg
+YW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUH
+AgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMBMGA1UdJQQMMAoGCCsG
+AQUFBwMCME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
+Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDAdBgNVHQ4EFgQU
+iPhM48Nu6I4H1Pb9BH55pJNPfoIwCwYDVR0PBAQDAgeAMBAGCiqGSIb3Y2QGAwEE
+AgUAMA0GCSqGSIb3DQEBBQUAA4IBAQCQAjc/KENJjRAJ1dugJUlY5GtaRFHDtFi6
+rU0FdxlyAYUJUzRzqEKE0onMWpJ3CevfTcoXIG+iEQ1DiNwWh5crYP85RlOoSqs8
+oporzTq+TUgI/XByzhCgtJwNx8gvUWJKJIgmL6SHvsGUit8fQjSlSjEjR2aPAuFG
+olZWsQmjNH9dluy5+BZLKSJ9hBo2TrhwJB1vk4B8+K2uqdG0T/elHxgNiq3KlPQt
+1s2Y+6kzGBnZuu42zlYnGSsNehNbWaEeW27avK/jilpNYaKQHotavbihXHQoUQml
+UYNFOqIRJyaMUDoC85+HH1CnfaFjj9T229z2/2pQUQGXskIt6hSa
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAwjdrw+8hKwbPbgsK8z3WhOX6ZlWE1xB3EK8MGmVdluRco4/u
+tE31gheJXmRCTGrOVyoLwls2zmlzv51KNG5/h0M9ltN4JIJMvlWxau0EJp6PM/cV
+TBbJ2ssY8SdaW2nxUoWcbiYVcBs2WXqzQYtXs3GH5nFYWH47LQ4wbMqBUnhzPdqH
+LT4u+CVXCK/LcRpnMT9Vepve8vLchakgpGRXOOWta5Yg5G4KgQKTj62IpHhBmGD+
+2Vq14odVsb0GmlFCHHVYqQ88a/0cL9pb0wqQnzxdeyguAtfvK3VM4o+dGshx7/U9
+fpwtmTeVfpsRbejy0UVLavQ/qO1OyVxJgKxmywIDAQABAoIBAG4mIn94cxZFAYYG
+y0oTS0QKbs51OCcFVpHmxXV/AepfT88QBbDK+i+zC5y2Pge7F5XF6e9r7hR5KEWH
+fptoA/oB/7835k7Ge6IDVeEv1YfVq6AsRS7nScpGH7o9uHhaCJzl3Ed4X/Y56MQs
+29eToMTL4einZhSiWwt9nadF3ryXR2/ZIYZbdfqKwA60ELL0/G90CU6vI76bxivZ
+QAzl2fG6U0WiwNKcmdc7MfYOXz2t9tsjPeRvPoKvNMwTIJXKAa7WzkUvZsjXaE1U
+fd6JQ1zlDqeAbbA2MCUdXM1ZAkLnwjh2+OxegEM9bEj8k4RLr530ywJKfI0FoqS+
+tz6RAikCgYEA93d9HmgPzysclhalZHBEDQEVpXaV9B4nmDg5WkOUdn48sFGNYgT6
+205XqxsCbSL2dur3T5xQMDYqqxX+rOXfq+eaU0y2ddTv4fvTWWAKdvlb1b23QXJV
+suWwkPbF1inOiNo0WEy1GY6cCrliuXexsrfTp8uZtnT9VowRMzoxkR0CgYEAyOnd
+prSvj1vavASPZ0BF4pdcfbm0T82ZlQo2TLzbUapsrNlqdHADylUMsB8YpoPf95b+
+VFjL76o3DPrjL9fsf0It7nI7AiMpdUPXqCsPWYcvBBUVXiXnzWcrT0Cw81TitK0/
+rU7HYn3LroqBZTpYXatyxpw1pdZiPCWsecwS+wcCgYAwDpVOrVi8m5uujfFKgv7E
+I7zHaDMQuDZqOijxHYScSkGQ4BV7vonUwu8FfHZJKWwBhfnHDQ0Jf8tjdB8EBpQc
+NxriKFiao2J+WUAe8Ca4Gg66gGAxJnn8Btz2GeYrg+zm6LEXoLXeo7Ir5vqEF/l7
+QnWo9UIBi9CS2RqR/zAXBQKBgQCMeWeubVrqgzC2kQGrEXdLbMUQas01lu0xFcjN
+cqZtvRjq6cDS1Jbx2vFaGwPjOQVZWUtNsiA02/BNtQUvqGsEt0LiGyBC6E7OXLbm
+L+U1lZ0733nnL92Y8e+IJBUUrV8tMIz7Ib+qj4Xf7Zt3KYorQ/ql/wZLg09/+l9T
+cWo79QKBgCg/6UmTTEFzkxBNTevQy/i+2WSl8Hs3jfBr/jMKoSb17HMuXVTP89eK
+4N8z8DZrx8czW7oOPhgWd4uYSx5ti0SSCdUqne57IE7Gf3Ul1ORIth1lvXccvMTj
+PtnftfShMZ6z1wVvpzR1+x1L4h0qBHFoLH4HrMHKod60u2xbdtoO
+-----END RSA PRIVATE KEY-----

+ 41 - 0
Ansjer/file/apns_pem/apns-dev_nw.pem

@@ -0,0 +1,41 @@
+Bag Attributes
+    friendlyName: Apple Development IOS Push Services: com.ansjer.loocamccloud
+    localKeyID: 88 F8 4C E3 C3 6E E8 8E 07 D4 F6 FD 04 7E 79 A4 93 4F 7E 82 
+subject=/UID=com.ansjer.loocamccloud/CN=Apple Development IOS Push Services: com.ansjer.loocamccloud/OU=JCHT67XT68/C=US
+issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIFkzCCBHugAwIBAgIIYwaKq6f2DAEwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTkwNjI2MDU1MzM5WhcNMjAwNjI1MDU1MzM5WjCBkjEnMCUGCgmSJomT8ixk
+AQEMF2NvbS5hbnNqZXIubG9vY2FtY2Nsb3VkMUUwQwYDVQQDDDxBcHBsZSBEZXZl
+bG9wbWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmFuc2plci5sb29jYW1jY2xv
+dWQxEzARBgNVBAsMCkpDSFQ2N1hUNjgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjdrw+8hKwbPbgsK8z3WhOX6ZlWE1xB3EK8M
+GmVdluRco4/utE31gheJXmRCTGrOVyoLwls2zmlzv51KNG5/h0M9ltN4JIJMvlWx
+au0EJp6PM/cVTBbJ2ssY8SdaW2nxUoWcbiYVcBs2WXqzQYtXs3GH5nFYWH47LQ4w
+bMqBUnhzPdqHLT4u+CVXCK/LcRpnMT9Vepve8vLchakgpGRXOOWta5Yg5G4KgQKT
+j62IpHhBmGD+2Vq14odVsb0GmlFCHHVYqQ88a/0cL9pb0wqQnzxdeyguAtfvK3VM
+4o+dGshx7/U9fpwtmTeVfpsRbejy0UVLavQ/qO1OyVxJgKxmywIDAQABo4IB5TCC
+AeEwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCC
+AQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2
+DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNz
+dW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQg
+dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kg
+YW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUH
+AgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMBMGA1UdJQQMMAoGCCsG
+AQUFBwMCME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
+Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDAdBgNVHQ4EFgQU
+iPhM48Nu6I4H1Pb9BH55pJNPfoIwCwYDVR0PBAQDAgeAMBAGCiqGSIb3Y2QGAwEE
+AgUAMA0GCSqGSIb3DQEBBQUAA4IBAQCQAjc/KENJjRAJ1dugJUlY5GtaRFHDtFi6
+rU0FdxlyAYUJUzRzqEKE0onMWpJ3CevfTcoXIG+iEQ1DiNwWh5crYP85RlOoSqs8
+oporzTq+TUgI/XByzhCgtJwNx8gvUWJKJIgmL6SHvsGUit8fQjSlSjEjR2aPAuFG
+olZWsQmjNH9dluy5+BZLKSJ9hBo2TrhwJB1vk4B8+K2uqdG0T/elHxgNiq3KlPQt
+1s2Y+6kzGBnZuu42zlYnGSsNehNbWaEeW27avK/jilpNYaKQHotavbihXHQoUQml
+UYNFOqIRJyaMUDoC85+HH1CnfaFjj9T229z2/2pQUQGXskIt6hSa
+-----END CERTIFICATE-----
+Bag Attributes
+    friendlyName: ansjer
+    localKeyID: 88 F8 4C E3 C3 6E E8 8E 07 D4 F6 FD 04 7E 79 A4 93 4F 7E 82 
+Key Attributes: <No Attributes>

+ 41 - 0
Ansjer/file/apns_pem/apns-loocamccloud.pem

@@ -0,0 +1,41 @@
+Bag Attributes
+    friendlyName: Apple Development IOS Push Services: com.loocam.loocamcloud
+    localKeyID: B0 37 EA 76 9F F8 94 4C E7 6A E7 85 05 37 99 B4 10 AC E7 A2 
+subject=/UID=com.loocam.loocamcloud/CN=Apple Development IOS Push Services: com.loocam.loocamcloud/OU=JCHT67XT68/C=US
+issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIFkTCCBHmgAwIBAgIIS894dI4qHJYwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTkwNjI2MDI1MDQ3WhcNMjAwNjI1MDI1MDQ3WjCBkDEmMCQGCgmSJomT8ixk
+AQEMFmNvbS5sb29jYW0ubG9vY2FtY2xvdWQxRDBCBgNVBAMMO0FwcGxlIERldmVs
+b3BtZW50IElPUyBQdXNoIFNlcnZpY2VzOiBjb20ubG9vY2FtLmxvb2NhbWNsb3Vk
+MRMwEQYDVQQLDApKQ0hUNjdYVDY4MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALtezKRHBBko9CaDqJTnX/itHK1baMPB6WHviVDJ
+6FG1vphLhg2PbZCIPdU3fQXnnqo+4u67ol/j5ER9jW1nmf5e9AzkjCGIA1Yst6SH
+s2VpIlwG3kd96f5Yjk161iXbJ0iMyu1Y2WiElpwOhd8IthXZl2eB7NYBJxW4utEg
+pXqS90U7QYg0Mt7hdO8gE9yO5K996Z8YabTQHRdoKhdgLUH8iGl57oO6usgiDvj0
+nXHjruBLOV0HwvV4SXPwShEScQN5M87WQx/EC2ocoocKL1G4x61ITPYEtq0VoELK
+LChnHyl4OaDhGQKtAZZlEKiZKql2r5JitsVsz/sFAA1QsiUCAwEAAaOCAeUwggHh
+MAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUiCcXCam2GGCL7Ou69kdZxVJUo7cwggEP
+BgNVHSAEggEGMIIBAjCB/wYJKoZIhvdjZAUBMIHxMIHDBggrBgEFBQcCAjCBtgyB
+s1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3Vt
+ZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRl
+cm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFu
+ZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMCkGCCsGAQUFBwIB
+Fh1odHRwOi8vd3d3LmFwcGxlLmNvbS9hcHBsZWNhLzATBgNVHSUEDDAKBggrBgEF
+BQcDAjBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNv
+bS9jZXJ0aWZpY2F0aW9uYXV0aG9yaXR5L3d3ZHJjYS5jcmwwHQYDVR0OBBYEFLA3
+6naf+JRM52rnhQU3mbQQrOeiMAsGA1UdDwQEAwIHgDAQBgoqhkiG92NkBgMBBAIF
+ADANBgkqhkiG9w0BAQUFAAOCAQEApenYB9Kku9rAtx8UOZc9aUlnolxp119BDgte
+t8JXi5FA5ujxT1JVLNUhgqeQmEHFzlgBs8/cWUdcyJpvoH3ppSlFefJf09pu2Nrw
+4UOHeoUFVJMc2hFEgHqEPk8gnY/PebgfrBc2E5iRj+C3nf+iyqCB9Ot8KNy9N9XB
+XrL6fcu4MHYuEgAjdq5ysVFgWEyYYEmKRAc1qnXkBIa8GUJ1q2JZ910aG4anfSDy
+km49HnxQJBzOpTjWWuNDwCwKXf55wNXocq1bZgjho/ByLX9waWSlTeamuHp5bu/P
+22NkrcR2/KLMjCPbRn5+ew5SPNEuFTkRML9WBCUcpPC1hzyxqA==
+-----END CERTIFICATE-----
+Bag Attributes
+    friendlyName: mac mini01
+    localKeyID: B0 37 EA 76 9F F8 94 4C E7 6A E7 85 05 37 99 B4 10 AC E7 A2 
+Key Attributes: <No Attributes>

+ 6 - 0
Ansjer/test/coposs_sts.py

@@ -69,3 +69,9 @@ bucket = oss2.Bucket(auth, endpoint, bucket_name)
 res = bucket.put_object('object-name.txt', b'hello world')
 print(res)
 
+
+'''
+# master 172.17.0.4
+
+slave 172.17.0.8
+'''

+ 27 - 0
Ansjer/test/util/jpush.py

@@ -11,3 +11,30 @@
 @file: jpush.py
 @Contact: chanjunkai@163.com
 """
+import apns2
+import time
+
+now_time = int(time.time())
+
+# cli = apns2.APNSClient(mode="dev", client_cert="/your/path.pem")
+# alert = apns2.PayloadAlert(body="body!", title="title!")
+# payload = apns2.Payload(alert=alert)
+# n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
+# response = cli.push(n=n, device_token="your_token")
+# assert response.status_code == 200, response.reason
+# assert response.apns_id
+import json
+
+token_val = 'ce10ecef7e78775b4100377e851e38b1687cb8df64b2a13ef32857df035a202a'
+# cli = apns2.APNSClient(mode="prod", client_cert=pem_path)
+pem_path = 'D:/13.56.215.252/git/AnsjerFormal/Ansjer/file/apns_pem/apns-dev-test.pem'
+cli = apns2.APNSClient(mode="dev", client_cert=pem_path, password='111111')
+push_data = {"alert": "Motion ", "event_time": now_time, "event_type": '51', "msg": "",
+             "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR"}
+alert = apns2.PayloadAlert(body=json.dumps(push_data), title="title!")
+payload = apns2.Payload(alert=alert)
+
+n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
+res = cli.push(n=n, device_token=token_val, topic='com.ansjer.loocamccloud')
+from var_dump import var_dump
+var_dump(res)

+ 4 - 0
Ansjer/urls.py

@@ -111,6 +111,8 @@ urlpatterns = [
     url(r'^v2/account/register$', UserController.v2registerView.as_view()),
     url(r'^v2/account/forgetCode$', UserController.v2forgetPwdCodeView.as_view()),
     url(r'^v2/account/resetPwdByCode$', UserController.v2resetPwdByCodeView.as_view()),
+    # 重置密码验证码校验
+    url(r'^v2/authcode/verify$', UserController.verifyAuthcode.as_view()),
 
     url(r'^detect/add$', EquipmentInfo.AddDetectionView.as_view()),
     url(r'^detect/status$', EquipmentInfo.DetectStatusView.as_view()),
@@ -129,6 +131,7 @@ urlpatterns = [
     url(r'^appVer/views$', AppInfo.AppVersionView.as_view()),
 
     url(r'^user/init$', UserController.InitInfoView.as_view()),
+    url(r'^user/initInfo$', UserController.InitInfoView.as_view()),
     # 获取时区相关信息
     url(r'^getTZ$', EquipmentStatus.getTZ),
 
@@ -144,6 +147,7 @@ urlpatterns = [
 
     url(r'^deviceShadow/update', EquipmentManager.update_device_shadow),
 
+    url(r'^log/getUploadUrl', EquipmentStatus.getUploadLogUrl),
     # 分区分流
     path('Test', Test.Test.as_view()),
     # 路由加参数参考

+ 12 - 9
Controller/DetectController.py

@@ -396,23 +396,26 @@ class NotificationView(View):
         return response.json(0)
 
     def do_apns(self, request_dict, uaql, response, uid):
+        event_type = request_dict.get('event_type', None)
         token_val = uaql['token_val']
         n_time = request_dict.get('n_time')
         appBundleId = uaql['appBundleId']
         apns_config = {
-            'appbundleId': {'pem_path': 'xxxx', 'topic': 'topic', 'password': 'password'}
+            'com.ansjer.loocamccloud': {
+                'pem_path': os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev-test.pem'),
+                'password': '111111'
+            }
         }
         try:
-            # daytime = time.strftime("%Y%m%d%H%M", time.localtime(1547256103))
-            # print(daytime)
-            pem_path = os.path.join(BASE_DIR, apns_config[appBundleId]['topic'])
-            # pem_path = os.path.join(BASE_DIR, 'Ansjer/file/apns-dev.pem')
-            cli = apns2.APNSClient(mode="dev", client_cert=pem_path, password='111111')
-            body = json.dumps({'uid': uid, 'n_time': n_time})
-            alert = apns2.PayloadAlert(body="body!", title="title!")
+            cli = apns2.APNSClient(mode="dev", client_cert=apns_config[appBundleId]['pem_path'],
+                                   password=apns_config[appBundleId]['password'])
+            push_data = {"alert": "Motion ", "event_time": n_time, "event_type": event_type, "msg": "",
+                         "received_at": n_time, "sound": "sound.aif", "uid": uid, "zpush": "1"}
+            body = json.dumps(push_data)
+            alert = apns2.PayloadAlert(body=body, title="title!")
             payload = apns2.Payload(alert=alert)
             n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
-            res = cli.push(n=n, device_token=token_val, topic=apns_config[appBundleId]['pem_path'])
+            res = cli.push(n=n, device_token=token_val, topic=appBundleId)
             # assert res.status_code == 200, res.reason
             # assert res.apns_id 
             if res.status_code == 200:

+ 47 - 3
Controller/EquipmentManager.py

@@ -637,7 +637,9 @@ def uid_status(request):
     response.lang = tko.lang
     if tko.code != 0:
         return response.json(tko.code)
-    qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode','p2p_region')
+    # 判断用户是否绑定设备
+    qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
+                                                    'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod')
     # 判断uid配置表信息是否存在
     if qs.exists():
         data = {
@@ -645,7 +647,11 @@ def uid_status(request):
             'push_interval': qs[0]['detect_interval'],  # 推送间隔
             'ucode': qs[0]['ucode'],
             'version': qs[0]['version'],
-            'p2p_region':qs[0]['p2p_region']
+            'p2p_region': qs[0]['p2p_region'],
+            'tz': qs[0]['tz'],
+            'video_code': qs[0]['video_code'],
+            'channel': qs[0]['channel'],
+            'cloud_vod': qs[0]['cloud_vod'],
         }
         # 查询云存储相关信息
         ubqs = UID_Bucket.objects.filter(uid=uid). \
@@ -720,17 +726,40 @@ def update_device_shadow(request):
         ucode = request_dict.get('ucode', None)
         version = request_dict.get('version', None)
         p2p_region = request_dict.get('p2p_region', None)
+        tz = request_dict.get('tz', None)
+        video_code = request_dict.get('video_code', None)
+        ip = CommonService.get_ip_address(request)
+        is_reset = request_dict.get('is_reset', None)
+        channel = request_dict.get('channel', None)
+        cloud_vod = request_dict.get('cloud_vod', None)
+        push_status = request_dict.get('push_status', None)
+        # 传1则重置设备信息
+        if is_reset == 1:
+            UidSetModel.objects.filter(uid=uid).delete()
         us_qs = UidSetModel.objects.filter(uid=uid)
         # 更新
         nowTime = int(time.time())
         if us_qs.exists():
-            update_dict = {'updTime':nowTime}
+            update_dict = {
+                'updTime': nowTime,
+                'ip': ip
+            }
+            if channel:
+                update_dict['channel'] = channel
             if p2p_region:
                 update_dict['p2p_region'] = p2p_region
             if ucode:
                 update_dict['ucode'] = ucode
             if version:
                 update_dict['version'] = version
+            if tz:
+                update_dict['tz'] = tz
+            if video_code:
+                update_dict['video'] = video_code
+            if cloud_vod:
+                update_dict['cloud_vod'] = cloud_vod
+            if push_status:
+                update_dict['push_status'] = push_status
             us_qs.update(**update_dict)
             return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
         # 新增
@@ -739,13 +768,28 @@ def update_device_shadow(request):
                 'uid': uid,
                 'addTime': nowTime,
                 'updTime': nowTime,
+                'ip': ip
             }
+            if channel:
+                create_dict['channel'] = channel
             if p2p_region:
                 create_dict['p2p_region'] = p2p_region
             if ucode:
                 create_dict['ucode'] = ucode
             if version:
                 create_dict['version'] = version
+            if tz:
+                create_dict['tz'] = tz
+            if video_code:
+                create_dict['video_code'] = video_code
+            if cloud_vod:
+                create_dict['cloud_vod'] = cloud_vod
+            if push_status:
+                create_dict['push_status'] = push_status
+            if account:
+                create_dict['account'] = account
+            if password:
+                create_dict['password'] = password
             UidSetModel.objects.create(**create_dict)
             return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
     else:

+ 32 - 3
Controller/EquipmentStatus.py

@@ -11,14 +11,16 @@
 @file: EquipmentStat.py
 @Contact: chanjunkai@163.com
 """
-from var_dump import var_dump
 import base64
 import urllib.parse
-
+import time
+import oss2
 from django.http import JsonResponse
 from django.views.decorators.csrf import csrf_exempt
 
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Model.models import Device_Info
+from Object.ETkObject import ETkObject
 from Object.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
 
@@ -96,6 +98,7 @@ def getTZ(request):
     c = request_dict.get('etk', None)
     ip = request_dict.get('ip', None)
     lang = request_dict.get('lang', None)
+    update = request_dict.get('update',None)
     if not ip:
         ip = CommonService.get_ip_address(request)
     if c:
@@ -106,7 +109,10 @@ def getTZ(request):
         uid = c.decode('utf-8')
         if len(uid) == 20:
             print(uid)
-            info = CommonService.getIpIpInfo(ip=ip, lang=lang)
+            if update:
+                info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=True)
+            else:
+                info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=False)
             try:
                 tz = info['utc_offset']
                 # 增加GMT,且补:00
@@ -125,3 +131,26 @@ def getTZ(request):
             return JsonResponse(status=200, data={'code': 404, 'msg': '令牌错误'})
     else:
         return JsonResponse(status=200, data={'code': 444, 'msg': '接口参数错误 etk'})
+
+
+# 设备日志上传
+def getUploadLogUrl(request):
+    request.encoding = 'utf-8'
+    if request.method == 'GET':
+        request_dict = request.GET
+    elif request.method == 'POST':
+        request_dict = request.POST
+    else:
+        return JsonResponse(status=200, data={'code': 403, 'msg': 'wrong post method!'})
+    etk = request_dict.get('etk', None)
+    eto = ETkObject(etk)
+    uid = eto.uid
+    if len(uid) == 20:
+        auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+        bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
+        nowTime = int(time.time())
+        obj = 'log/{uid}'.format(uid=uid) + str(nowTime) + '.log'
+        url = bucket.sign_url('PUT', obj, 7200)
+        return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'url': url})
+    else:
+        return JsonResponse(status=200, data={'code': 404, 'msg': 'wrong etk'})

+ 8 - 4
Controller/FeedBack.py

@@ -83,7 +83,8 @@ class FeedBackView(View):
             fb['img_url'] = []
             for sm in sm_qs:
                 if sm['feedbackmodel__id'] == fb['id']:
-                    img_url = bucket.sign_url('GET', sm['name'], 3600)
+                    obj = 'feedback/' + sm['name']
+                    img_url = bucket.sign_url('GET', obj, 3600)
                     fb['img_url'].append(img_url)
                     # fb['FS__name'] = sm['name']
             res.append(fb)
@@ -144,9 +145,11 @@ class FeedBackView(View):
             bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
             for upType in uploadType:
                 name = CommonService.createOrderID()
-                obj = str(name) + '.' + upType
+                s_name = str(name) + '.' + upType
+                obj = 'feedback/' + s_name
+
                 url = bucket.sign_url('PUT', obj, 7200)
-                res.append({'put_url': url, 'res_name': obj})
+                res.append({'put_url': url, 'res_name': s_name})
             return response.json(0, res)
         else:
             return response.json(444, 'uploadType')
@@ -207,7 +210,8 @@ class FeedBackView(View):
                     fb['img_url'] = []
                     for sm in sm_qs:
                         if sm['feedbackmodel__id'] == fb['id']:
-                            img_url = bucket.sign_url('GET', sm['name'], 3600)
+                            obj = 'feedback/' + sm['name']
+                            img_url = bucket.sign_url('GET', obj, 3600)
                             # img_url.replace('statres.oss-cn-hongkong.aliyuncs.com','static.zositech.xyz')
                             fb['img_url'].append(img_url)
                             # fb['FS__name'] = sm['name']

+ 19 - 15
Controller/Test.py

@@ -13,6 +13,7 @@
 """
 from django.views.generic.base import View
 import os
+
 '''
 http://192.168.136.40:8077/Test
 '''
@@ -29,12 +30,8 @@ class Test(View):
 
     def get(self, request, *args, **kwargs):
 
-
-
-
-        
         request_dict = request.GET
-        # return self.do_apns(request_dict)
+        return self.do_apns(request_dict)
         # return self.do_get_putOss_url(request.GET)
         # from django.http import JsonResponse
         # return JsonResponse(status=200,data={
@@ -70,24 +67,32 @@ class Test(View):
             print("not paid...")
             return response.json(404)
 
-
-    def do_apns(self,request_dict):
-        token_val = request_dict.get('token_val',None)
-        pem_path = os.path.join(BASE_DIR,'Ansjer/file/apns_pem/apns-dev.pem')
+    def do_apns(self, request_dict):
+        token_val = request_dict.get('token_val', None)
+        pem_path = os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev-test.pem')
         print(pem_path)
         response = ResponseObject()
         try:
             import apns2
             now_time = int(time.time())
 
-            cli = apns2.APNSClient(mode="prod", client_cert=pem_path)
-            push_data = {"alert": "Motion ", "event_time": now_time, "event_type": '51', "msg": "",
-                         "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR"}
+            # cli = apns2.APNSClient(mode="dev", client_cert="/your/path.pem")
+            # alert = apns2.PayloadAlert(body="body!", title="title!")
+            # payload = apns2.Payload(alert=alert)
+            # n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
+            # response = cli.push(n=n, device_token="your_token")
+            # assert response.status_code == 200, response.reason
+            # assert response.apns_id
+
+            # cli = apns2.APNSClient(mode="prod", client_cert=pem_path)
+            cli = apns2.APNSClient(mode="dev", client_cert=pem_path, password='111111')
+            push_data = {"alert": "Motion ", "event_time": now_time, "event_type": "51", "msg": "",
+                         "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR", "zpush": "1"}
             alert = apns2.PayloadAlert(body=json.dumps(push_data), title="title!")
             payload = apns2.Payload(alert=alert)
 
             n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
-            res = cli.push(n=n, device_token=token_val,topic='com.ansjer.zccloud')
+            res = cli.push(n=n, device_token=token_val, topic='com.ansjer.loocamccloud')
             if res.status_code == 200:
                 return response.json(0)
             else:
@@ -95,10 +100,9 @@ class Test(View):
         except Exception as e:
             return response.json(10, repr(e))
 
-
     def do_get_putOss_url(self, request_dict):
         import oss2
-        obj_name = request_dict.get('obj_name','')
+        obj_name = request_dict.get('obj_name', '')
         # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
         auth = oss2.Auth('LTAIyMkGfEdogyL9', '71uIjpsqVOmF7DAITRyRuc259jHOjO')
         # Endpoint以杭州为例,其它Region请按实际情况填写。

+ 18 - 7
Controller/UidSetController.py

@@ -19,7 +19,7 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 
-from Model.models import UidSetModel
+from Model.models import UidSetModel, Device_User, Device_Info
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -64,7 +64,9 @@ class UidSetView(View):
         if tko.code != 0:
             return response.json(tko.code)
         userID = tko.userID
-        if operation == 'adminDelete':
+        if operation == 'queryAll':
+            return self.do_queryAll(request_dict, userID, response)
+        elif operation == 'adminDelete':
             return self.do_admin_delete(request_dict, userID, response)
         elif operation == 'adminQuery':
             return self.do_admin_query(request_dict, userID, response)
@@ -75,7 +77,19 @@ class UidSetView(View):
         else:
             return response.json(444, 'error path')
 
-    # 管理员删除
+    def do_queryAll(self, request_dict, userID, response):
+        uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
+        uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'detect_status', 'detect_interval',
+                                                                         'version', 'ucode', 'p2p_region', 'tz',
+                                                                         'video_code', 'channel', 'cloud_vod')
+        
+        if uid_set_qs.exists():
+            return response.json(0, list(uid_set_qs))
+        else:
+            return response.json(0)
+
+        # 管理员删除
+
     def do_admin_delete(self, request_dict, userID, response):
         own_perm = ModelService.check_perm(userID, 20)
         if own_perm is True:
@@ -101,7 +115,7 @@ class UidSetView(View):
             line = request_dict.get('line', None)
             page = int(page)
             line = int(line)
-            omqs = UidSetModel.objects.all().order_by( '-id')
+            omqs = UidSetModel.objects.all().order_by('-id')
             if not omqs.exists():
                 return response.json(0, [])
             count = omqs.count()
@@ -157,6 +171,3 @@ class UidSetView(View):
             errorInfo = traceback.format_exc()
             print(errorInfo)
             return response.json(500, {'details': errorInfo})
-
-
-

+ 14 - 0
Controller/UserBrandController.py

@@ -250,6 +250,19 @@ class UserBrandInfo(View):
         print ('---------------------------------------------------------')
         if check_perm is True:
             # 按照用户去重复查询
+            user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
+            send_jsons=[]
+            counts=0
+            for i in user_brand_queryset:
+                counts=counts+1
+                user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
+                user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
+                username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
+                user_brand_querysetlast["datas"][0]['fields']['username']=username
+                send_jsons.append(user_brand_querysetlast["datas"][0])
+            deviceSupplier=[]
+            for k, v in enumerate(send_jsons):
+                deviceSupplier.append(v['fields']['deviceSupplier'])
             # user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
             # send_jsons=[]
             # counts=0
@@ -277,6 +290,7 @@ class UserBrandInfo(View):
                 deviceSupplier.append(v['deviceSupplier'])
                 print (v)
             deviceSupplier = Counter(deviceSupplier)
+            return response.json(0, {'datas': deviceSupplier,'counts':counts})
             print(deviceSupplier)
             print ('---------------------------------------------------------')
             return response.json(0, {'datas': deviceSupplier, 'counts': count})

+ 77 - 13
Controller/UserController.py

@@ -862,7 +862,7 @@ class v2forgetPwdCodeView(TemplateView):
         reds = RedisObject()
         resetCode = reds.get_data(key=phone + '_forgetPwdResetCode')
         if resetCode is True:
-            return response.json(90)
+            return response.json(120)
         resetCode = RandomStr(6, True)
         if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
             return response.json(10, '生成缓存错误')
@@ -870,7 +870,8 @@ class v2forgetPwdCodeView(TemplateView):
         res = aliSms.send_code_sms(phone=phone, code=resetCode, sign_name='Ansjer',
                                    temp_msg='SMS_151675019')
         if res["Code"] == "OK":
-            return response.json(0, {'forgetPwdResetCode': resetCode})
+            # return response.json(0, {'forgetPwdResetCode': resetCode})
+            return response.json(0)
         else:
             return response.json(10, res["Message"])
 
@@ -884,7 +885,7 @@ class v2forgetPwdCodeView(TemplateView):
         reds = RedisObject()
         resetCode = reds.get_data(key=email + '_forgetPwdResetCode')
         if resetCode is True:
-            return response.json(90)
+            return response.json(120)
         resetCode = RandomStr(6, True)
         if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=600):
             return response.json(10, '生成缓存错误')
@@ -960,12 +961,12 @@ class v2resetPwdByCodeView(TemplateView):
             return response.json(104)
         reds = RedisObject()
         resetCode = reds.get_data(key=email + '_forgetPwdResetCode')
-        if resetCode is True:
+        if resetCode is False:
             return response.json(90)
         if authcode != resetCode:
             return response.json(121)
-        if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=300):
-            return response.json(10, '生成缓存错误')
+        # if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=300):
+        #     return response.json(10, '生成缓存错误')
         user_qs.update(password=make_password(password))
         if not reds.del_data(email + '_forgetPwdResetCode'):
             return response.json(10, '删除缓存失败')
@@ -982,12 +983,12 @@ class v2resetPwdByCodeView(TemplateView):
             return response.json(102)
         reds = RedisObject()
         resetCode = reds.get_data(key=phone + '_forgetPwdResetCode')
-        if resetCode is True:
+        if resetCode is False:
             return response.json(90)
         if authcode != resetCode:
             return response.json(121)
-        if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
-            return response.json(10, '生成缓存错误')
+        # if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
+        #     return response.json(10, '生成缓存错误')
         user_qs.update(password=make_password(password))
         if not reds.del_data(phone + '_forgetPwdResetCode'):
             return response.json(10, '删除缓存失败')
@@ -1084,8 +1085,10 @@ class v2LoginView(TemplateView):
     def valid_login(self, user_qs, password, response):
         if not user_qs.exists():
             return response.json(104)
-        users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
-                               'phone', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
+        # users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
+        #                        'phone', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
+        users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
+                               'phone', 'password', 'userIconPath')[0]
         if not check_password(password, users['password']):
             return response.json(111)
         userID = users['userID']
@@ -1138,10 +1141,71 @@ class InitInfoView(View):
 
     # 初始化设备token
     def init_uid(self, request_dict, userID, response):
-        token_val = request_dict.get('token_val', None)
-        m_code = request_dict.get('m_code', None)
+        # token_val = request_dict.get('token_val', None)
+        # m_code = request_dict.get('m_code', None)
         sm_count = SysMsgModel.objects.filter(userID_id=userID, status=0).count()
         res = {
             'usmsg': sm_count
         }
         return response.json(0, res)
+
+
+# 获取验证码
+class verifyAuthcode(TemplateView):
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        lang = request.POST.get('lang', None)
+        if not lang:
+            lang = request.POST.get('language', None)
+        response = ResponseObject(lang)
+        request_dict = request.POST
+        return self.ValidationError(request_dict, response)
+
+    def get(self, request, *args, **kwargs):
+        # Device_User.objects.filter(userEmail='chanjunkai@163.com').delete()
+        request.encoding = 'utf-8'
+        lang = request.GET.get('lang', None)
+        if not lang:
+            lang = request.GET.get('language', None)
+        response = ResponseObject(lang)
+        request_dict = request.GET
+        return self.ValidationError(request_dict, response)
+
+    def ValidationError(self, request_dict, response):
+        email = request_dict.get('email', None)
+        phone = request_dict.get('phone', None)
+        authcode = request_dict.get('authcode', None)
+        if email is not None:
+            email = email.strip()
+            return self.email_validate(email, authcode, response)
+        elif phone is not None:
+            phone = phone.strip()
+            return self.phone_validate(phone, authcode, response)
+        else:
+            return response.json(444)
+
+    def email_validate(self, email, authcode, response):
+        data_valid = DataValid()
+        if data_valid.email_validate(email) is not True:
+            return response.json(105)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=email + '_forgetPwdResetCode')
+        if resetCode is False:
+            return response.json(120)
+        if authcode != resetCode:
+            return response.json(121)
+        return response.json(0)
+
+    def phone_validate(self, phone, authcode, response):
+        data_valid = DataValid()
+        if data_valid.mobile_validate(phone) is not True:
+            return response.json(100)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=phone + '_forgetPwdResetCode')
+        if resetCode is False:
+            return response.json(120)
+        print(resetCode)
+        if authcode != resetCode:
+            return response.json(121)
+        return response.json(0)

BIN
DB/mydata4vipday2.ipdb


+ 7 - 0
Model/models.py

@@ -654,6 +654,7 @@ class SysMsgModel(models.Model):
 class UidSetModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     uid = models.CharField(max_length=20, verbose_name='设备UID')
+    channel = models.SmallIntegerField(default=0, verbose_name='通道数量')  #
     detect_status = models.SmallIntegerField(default=0, verbose_name='推送开关')  # 状态[0:关闭,1:开启,2:用户解绑]
     detect_interval = models.IntegerField(verbose_name='推送间隔', default=0)  # 秒
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
@@ -662,6 +663,12 @@ class UidSetModel(models.Model):
     ucode = models.CharField(max_length=32, verbose_name='设备产品码', default='')
     version = models.CharField(max_length=32, verbose_name='设备版本', default='')
     p2p_region = models.CharField(max_length=16, verbose_name='设备区域', default='ALL')  # ALL CN EU US
+    # addTime Thu Jun 27 02:32:45 UTC 2019
+    cloud_vod = models.SmallIntegerField(default=2, verbose_name='云存开关')  # 0,关闭,1开启,2,不支持
+    tz = models.CharField(default='', max_length=16, verbose_name='设备时区')  # utc+8
+    video_code = models.SmallIntegerField(default=0, verbose_name='编码类型')  # 0:264,1:265
+
+    nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
 
     class Meta:
         db_table = 'uid_set'

+ 0 - 3
Object/ETkObject.py

@@ -34,6 +34,3 @@ class ETkObject(object):
             print(repr(e))
 
 
-
-eto = ETkObject('R19XRFZZVGpZMU5VUkRXVE5NVUZsWE1qRXhNVUU9ViY=')
-print(eto.uid)

+ 2 - 1
Object/TokenObject.py

@@ -21,7 +21,7 @@ class TokenObject:
 
     def __init__(self, token=None):
         if token == 'local':
-            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NjAzMjQ5MDJ9.aVvJaXQwNX3AM_q-x2rsghEc118FIj38TT275fU5MSM'
+            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NjQzMDc0MzZ9.xGTQTwcLvU4tH9pm45Y-nCi-P7wkWl-1EzsVKeudMhQ'
         if token == 'test':
             token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJ1c2VySUQiOiIxNTE1NjQyNjIzMzc5Mzk1MTM4MDAxMzgwMDEiLCJsYW5nIjoiZW4iLCJleHAiOjE1NTI2MTIxOTF9.sO8BtSclN6B-qwqNmYWbICatHYEtyMdoqzZ0hcOSsmg'
         self.token = token
@@ -43,6 +43,7 @@ class TokenObject:
             self.user = res.get('user', '')
             # 刷新登录时间
             if self.userID:
+                print(self.user)
                 redisObj = RedisObject(db=3)
                 redisObj.set_data(key=self.userID, val=self.user, expire=300)
 

+ 8 - 2
Service/CommonService.py

@@ -98,8 +98,14 @@ class CommonService:
 
     # 通过ip检索ipip指定信息 lang为CN或EN
     @staticmethod
-    def getIpIpInfo(ip,lang):
-        db = ipdb.City(BASE_DIR + "/DB/mydata4vipday2.ipdb")
+    def getIpIpInfo(ip,lang,update=False):
+        ipbd_dir = BASE_DIR + "/DB/mydata4vipday2.ipdb"
+        db = ipdb.City(ipbd_dir)
+        if update:
+            from var_dump import var_dump
+            var_dump('is_update')
+            rr = db.reload(ipbd_dir)
+            var_dump(rr)
         info = db.find_map(ip, lang)
         return info
 

+ 2 - 1
requirements.txt

@@ -25,4 +25,5 @@ pyipip
 boto
 django-ratelimit
 paypalrestsdk
-pymongo
+pymongo
+apns2-client