Эх сурвалжийг харах

Merge branch 'master' of http://192.168.136.45:3000/chanjunkai/Ansjer

# Conflicts:
#	Ansjer/config.py
#	Ansjer/settings.py
#	Ansjer/test/util/encryDownLoad.py
#	Ansjer/urls.py
#	Controller/AccessLog.py
#	Controller/AdminManage.py
#	Controller/AppInfo.py
#	Controller/CheckUserData.py
#	Controller/DeviceLog.py
#	Controller/DeviceManage.py
#	Controller/DeviceMeal.py
#	Controller/EquipmentInfo.py
#	Controller/EquipmentManager.py
#	Controller/EquipmentOTA.py
#	Controller/EquipmentSensor.py
#	Controller/EquipmentStatus.py
#	Controller/FeedBackInfo.py
#	Controller/HlsManage.py
#	Controller/LogAccess.py
#	Controller/LogManager.py
#	Controller/MealManage.py
#	Controller/OTAEquipment.py
#	Controller/OauthManage.py
#	Controller/PermissionManager.py
#	Controller/StreamMedia.py
#	Controller/SysManage.py
#	Controller/Test.py
#	Controller/UserManger.py
#	Controller/shareUserPermission.py
#	DB/data.json
#	Model/models.py
#	Object/AWS/SesClassObject.py
#	Service/CommonService.py
#	Service/MiscellService.py
#	Service/ModelService.py
#	Service/TemplateService.py
#	Service/middleware.py
chenjunkai 7 жил өмнө
parent
commit
a8060d38c8
49 өөрчлөгдсөн 4664 нэмэгдсэн , 2391 устгасан
  1. 9 0
      .gitignore
  2. 14 43
      Ansjer/config.py
  3. 27 0
      Ansjer/file/pk-APKAINI6BNPKV54NHH7Q.pem
  4. 18 12
      Ansjer/settings.py
  5. 10 0
      Ansjer/test/666.py
  6. 151 0
      Ansjer/test/SyncdbTools.sh
  7. 33 0
      Ansjer/test/cloudfront_sign_url.py
  8. 71 0
      Ansjer/test/encryDownLoad.py
  9. 24 0
      Ansjer/test/m3u8_generate.py
  10. 113 0
      Ansjer/test/signCookie.py
  11. 140 0
      Ansjer/test/testa.py
  12. 4 9
      Ansjer/test/util/encryDownLoad.py
  13. 94 78
      Ansjer/urls.py
  14. 111 72
      Controller/AccessLog.py
  15. 75 78
      Controller/AdminManage.py
  16. 54 50
      Controller/AppInfo.py
  17. 85 40
      Controller/CheckUserData.py
  18. 23 23
      Controller/DeviceLog.py
  19. 43 44
      Controller/DeviceManage.py
  20. 67 66
      Controller/DeviceMeal.py
  21. 69 71
      Controller/EquipmentInfo.py
  22. 211 170
      Controller/EquipmentManager.py
  23. 50 55
      Controller/EquipmentOTA.py
  24. 50 55
      Controller/EquipmentSensor.py
  25. 11 14
      Controller/EquipmentStatus.py
  26. 49 54
      Controller/FeedBackInfo.py
  27. 91 94
      Controller/HlsManage.py
  28. 26 30
      Controller/LogAccess.py
  29. 83 39
      Controller/LogManager.py
  30. 65 65
      Controller/MealManage.py
  31. 349 247
      Controller/OTAEquipment.py
  32. 106 255
      Controller/OauthManage.py
  33. 474 182
      Controller/PermissionManager.py
  34. 145 149
      Controller/StreamMedia.py
  35. 12 15
      Controller/SysManage.py
  36. 10 18
      Controller/Test.py
  37. 747 145
      Controller/UserManger.py
  38. 121 114
      Controller/shareUserPermission.py
  39. 15 3
      DB/data.json
  40. 70 18
      Model/models.py
  41. 1 1
      Object/AWS/SesClassObject.py
  42. 45 0
      README.md
  43. 2 31
      Service/CommonService.py
  44. 32 27
      Service/MiscellService.py
  45. 4 13
      Service/ModelService.py
  46. 338 0
      Service/ResponseService.py
  47. 40 4
      Service/TemplateService.py
  48. 270 0
      Service/TokenManager.py
  49. 12 7
      Service/middleware.py

+ 9 - 0
.gitignore

@@ -0,0 +1,9 @@
+/.idea
+/static
+/Model/migrations
+/Ansjer/__pycache__
+/Controller/__pycache__
+/Model/__pycache__
+/Object/__pycache__
+/Service/__pycache__
+/Object/AWS/__pycache__

+ 14 - 43
Ansjer/config.py

@@ -12,55 +12,26 @@
 @Contact: chanjunkai@163.com
 """
 #主要静态变量配置文件
+import os
 import datetime
-from Ansjer.settings import SERVER_TYPE
-
+from var_dump import var_dump
 
+# 根目录
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 # 发送邮件邮箱
 COMPANY_EMAIL = 'user_server@nsst.com'
+# token加密令牌,过期时间,刷新过期时间
+SECRET_KEY = 'c7ki2_gkg4#sjfm-u1%$s#&n#szf01f*v69rwv2qsf#-zmm@tl'
+EXPIRATION_DELTA = datetime.timedelta(days=7)
+REFRESH_EXPIRATION_DELTA = datetime.timedelta(days=7)
+STATIC_URL = '/static/'
+
+
+
+
 AWS_ACCESS_ID = 'AKIAJKPU23EU5QWHFPKQ'
 AWS_ACCESS_SECRET = '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'
 AWS_ACCESS_REGION = 'us-east-1'
 AWS_BUCKET = 'ansjertest'
 # 设定离线时间为5分钟
-OFF_LINE_TIME_DELTA = 5
-
-# token的secret
-OAUTH_ACCESS_TOKEN_SECRET = 'a+jbgnw%@1%zy^=@dn62%'
-OAUTH_REFRESH_TOKEN_SECRET = 'r+jbgnw%@1%zy^=@dn62%'
-# access_token超时
-# OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(hours=1)
-OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(days=3)
-# refresh_token超时
-OAUTH_REFRESH_TOKEN_TIME = datetime.timedelta(days=3)
-# 腾讯验证,短信发送
-TX_PHONE_APP_ID = '1400052907'
-TX_PHONE_APP_KEY= '7705976ca6e85fe7b86d6bc2d11f7783'
-
-#验证码超时时间
-AuthCode_Expire = 600
-
-if SERVER_TYPE == 'local':
-    NGINX_RTMP_STAT = 'http://192.168.136.45:8077/stat'
-    SERVER_DOMAIN = 'http://192.168.136.45:8077'
-    DATABASE_DATA = 'Ansjer'
-    SERVER_HOST = '192.168.136.45'
-    RTMP_PUSH_URL = 'rtmp://192.168.136.45:1935/hls'
-    DOMAIN_OAUTH_URI = 'http://192.168.136.45:7088/'
-    DOMAIN_RESOURCE_URI = 'http://192.168.136.45:8077/'
-elif SERVER_TYPE == 'test':
-    NGINX_RTMP_STAT = 'http://13.56.215.252:82/stat'
-    SERVER_DOMAIN = 'https://www.dvema.com:8222'
-    DATABASE_DATA = 'AnsjerTest'
-    SERVER_HOST = 'localhost'
-    RTMP_PUSH_URL = 'http://13.56.215.252:8091/hls'
-    DOMAIN_OAUTH_URI = 'https://www.dvema.com:8022/'
-    DOMAIN_RESOURCE_URI = 'https://www.dvema.com:8222/'
-elif SERVER_TYPE == 'formal':
-    NGINX_RTMP_STAT = 'http://13.56.215.252:81/stat'
-    SERVER_DOMAIN = 'https://www.dvema.com:8111'
-    DATABASE_DATA = 'Ansjer81'
-    SERVER_HOST = 'localhost'
-    RTMP_PUSH_URL = 'http://13.56.215.252:8091/hls'
-    DOMAIN_OAUTH_URI = 'https://www.dvema.com:8011/'
-    DOMAIN_RESOURCE_URI = 'https://www.dvema.com:8111/'
+OFF_LINE_TIME_DELTA = 5

+ 27 - 0
Ansjer/file/pk-APKAINI6BNPKV54NHH7Q.pem

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAjBX7IqEVIj14KE0RFVvtfq5yWzmT5myzqMwPUPk6NRKbDQ8z
+pkP8fhPYheMK3VPNlgPX2aBT98ovlc6qzZfZKhk5oNThgGr5Op7UlCRvwqucvXY5
+ekUaEG2QDMHcgEMdS8e+ymkntj+DfTN3Um175CTahrs3jI+zHWdebEl2rf9l6Qv+
+0hx/fawdEc1ZLryEHYE/WyJYDGzyDlpoW7evSNqHEZCLmCvYxCvwhAEtWEohSL2R
+Mrei6wyU6PT5hMp6gM+k8PLdnExMRsWENh7+MR+aXyiMJrGl26js/HId7RpwIBVN
+j1lofCufC/nqGCo0UcQthgmJXBY8iUcKTQCdnQIDAQABAoIBAEKfvaX1mHiFZZ09
+Me/HncdPLkImuymu7y9LhclMDxvosmdeoIDl+rL3u1XJ6oPi9Hbxcvok32qM9V65
+QNCw9G6qOpc8R9dsiQYRPicKwUCDn/MXxDRbow7HHOiEVtuFj+xXnmzj4Cg0QtQL
+4ycHvRF/WZMUfVHTkitc2zKDKfeMOQjw86bvyA9TksC1MUtHt9uvVr5OVpLSpvn3
+0se949ULAnmDSRg6HrH7QNOLsLJgxSYwc0FJHad7/zYHa/2qx20zeB1zaVKwmsYq
+I5TuwuU0fKf6JY3DogozJHoUuXxEUZZvInour51WDkhT4t//URORze3XYLXPDshf
+WmphPp0CgYEAvcm8kY/Yx8hehEktMLsJ1DZh/lhr+82j73AgPj93mZETwq0o1fWR
+g4ctZXo6cs021pE6JxKohs6sx7e6VbfqAp0r9BEG83j2rE2ZcZF9kZ6x5bb9dJv+
+qnbMtiF/eZ1WAYUFy8DrQYyrUeeIYbsV0hBP22aiJSJjRcXpUcWX1XcCgYEAvPVE
+PER6gixREgSKwRFA39teBDGxEmxCpHjmQnVG4Xcp7h6ggfP0J3TgwU4XFeQSGtVt
+7uMSgrbrF9vtybZM5j49tk3o2lfRZ0/OgDt/ZdqSKEvT8+vm4iXQQiWOQR6pYwsd
+46YPhS7P2aTZQbKJjdHk7dl7S8XcWqIZ5bATeosCgYBDkSLVH8UpuygLKJIyGySw
+rHvOtWQcTWXjxKN2Bdpqjb/fOw6ivb6EeQesbQuJ+41ebm2po3bkJ4hTwhFQmx1w
+uMwBJF65J4OKbEYIrKdrxHfJNJCfhznvLkRLQznC7kTEXbtmgtQ+jfogOrHPOW/X
+TX9guPVZCxkUqhUay6H2mQKBgGy4gkZa8FItxYekbWGg1771rSakoMmE2ONhXLso
+V1wrAEkt/hRHlVeOfDM9BzNlQrWFz/b/WAs1zBaySCMjbSOc9E0MjsnydV4IITzO
+/wJPvIDLAGz8cp/0OduVWEBHsBZ4sv3k8lEjGhyUKR0P6O1cs2fXFoYGlj7fvh7W
+LJ75AoGAcmdaaOaX3pehxW02ItIJ2CN6ZxJTmIt4v2dfYoBM7tKIM0lO9ruVf4A/
+1UxWeGmEgDjJ0ugwt0SkonedOrAcicqhkKoRb2BJyZu/kZX1jHMNbNJRdtx1gLYF
+BE2Lzx02XIqWjWHEfoMzV6rWYBIezAaagb8BwwYD+nPzrmbl2GM=
+-----END RSA PRIVATE KEY-----

+ 18 - 12
Ansjer/settings.py

@@ -1,12 +1,9 @@
-import os
+from Ansjer.config import *
 
-# SERVER_TYPE = 'local'
-SERVER_TYPE = 'test'
+SERVER_TYPE = 'local'
+#SERVER_TYPE = 'test'
 # SERVER_TYPE = 'formal'
-# 根目录
 
-SECRET_KEY = 'c7ki2_gkg4#sjfm-u1%$s#&n#szf01f*v69rwv2qsf#-zmm@tl'
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 DEBUG = True
 # DEBUG = False
 ALLOWED_HOSTS = ['*']
@@ -20,6 +17,8 @@ INSTALLED_APPS = [
     'django.contrib.staticfiles',
     'corsheaders',
     'imagekit',
+    # 'guardian',
+    'django_global_request',
     'Model',
 ]
 
@@ -29,7 +28,7 @@ MIDDLEWARE = [
     'django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
-    # 'django.middleware.csrf.CsrfViewMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
     'corsheaders.middleware.CorsPostCsrfMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
@@ -45,9 +44,6 @@ AUTHENTICATION_BACKENDS = (
 
 ADDR_URL = []
 ANONYMOUS_USER_ID = -1  # 支持匿名用户
-
-STATIC_URL = '/static/'
-
 # 上传路径根目录
 MEDIA_ROOT = os.path.join(BASE_DIR, 'static/Upgrate')
 # 在浏览器上访问该上传文件的url的前缀
@@ -56,7 +52,9 @@ ROOT_URLCONF = 'Ansjer.urls'
 LOGIN_URL = '/account/login'
 AUTH_USER_MODEL = 'Model.Device_User'  # 自定义Model
 APPEND_SLASH = False
-
+# 腾讯验证
+SDK_AppID = '1400052907'
+App_Key = '7705976ca6e85fe7b86d6bc2d11f7783'
 TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
@@ -75,17 +73,25 @@ TEMPLATES = [
 
 WSGI_APPLICATION = 'Ansjer.wsgi.application'
 
-# 服务器类型
 if SERVER_TYPE == 'local':
+    NGINX_RTMP_STAT = 'http://192.168.136.45:8077/stat'
+    SERVER_DOMAIN = 'http://192.168.136.45:8077'
     DATABASE_DATA = 'Ansjer'
     SERVER_HOST = '192.168.136.45'
+    RTMP_PUSH_URL = 'rtmp://192.168.136.45:1935/hls'
+
 elif SERVER_TYPE == 'test':
     NGINX_RTMP_STAT = 'http://13.56.215.252:82/stat'
+    SERVER_DOMAIN = 'http://13.56.215.252:82'
     DATABASE_DATA = 'AnsjerTest'
     SERVER_HOST = 'localhost'
+    RTMP_PUSH_URL = 'http://13.56.215.252:8091/hls'
 elif SERVER_TYPE == 'formal':
+    NGINX_RTMP_STAT = 'http://13.56.215.252:81/stat'
+    SERVER_DOMAIN = 'http://13.56.215.252:81'
     DATABASE_DATA = 'Ansjer81'
     SERVER_HOST = 'localhost'
+    RTMP_PUSH_URL = 'http://13.56.215.252:8091/hls'
 
 DATABASES = {'default': {
     'ENGINE': 'django.db.backends.mysql',

+ 10 - 0
Ansjer/test/666.py

@@ -0,0 +1,10 @@
+from Crypto.PublicKey import RSA
+code = 'noonekowns'
+key = RSA.generate(2048)
+encrypted_key =key.exportKey(passphrase=code, pkcs=8,protection="scryptAndAES128-CBC")
+
+print(encrypted_key)
+exit()
+
+with open('/path_to_public_key/my_rsa_public.pem', 'wb') as f:
+    f.write(key.publickey().exportKey())

+ 151 - 0
Ansjer/test/SyncdbTools.sh

@@ -0,0 +1,151 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides:          Liuzhiting
+# Required-Start:    $local_fs $remote_fs $network $syslog
+# Required-Stop:     $local_fs $remote_fs $network $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: starts the mysql migrate
+# Description:       A database migration script for a back-end server system.
+### END INIT INFO
+
+function mysqlDump(){
+        echo 你输入的文件名称是:$3.txt
+	echo $1 $2 $3 $4 $3.txt $(date +%Y%m%d)
+	filePath="/mnt/sql/$(date +%Y%m%d)/"
+	if [ ! -x "$filePath" ];then
+		mkdir -p "$filePath"
+	fi
+
+        if [ "$2" == "all" ];then
+                echo 你选择的是全部备份,正在备份迁移请等待...
+		mysqldump -u root -pliuzhiting $1 > $filePath$3.txt
+		
+		filesize=$(stat -c "%s" $filePath$3.txt)
+		
+		if [ $filesize -gt 0 ];then
+			fullPath=$filePath$3.txt
+			echo "$fullPath $filesize 1024" | awk '{printf("备份文件全路径是:%s,文件大小:%0.5fkb\n", $1, $2/$3)}'
+			echo 备份迁移完成...
+			return 0
+		else
+			echo 未知原因,无法备份迁移...
+			return -1
+		fi
+
+
+        elif [ "$2" == "table" ];then
+                echo 你选择的备份的表格是:$4
+		mysqldump -u root -pliuzhiting $1 $4 > $filePath$3.txt
+		
+		filesize=$(stat -c "%s" $filePath$3.txt)
+		
+		if [ $filesize -gt 0 ];then
+			# echo 备份文件全路径:$filePath$3.txt,文件大小:$[$filesize/1024]kb
+			fullPath=$filePath$3.txt
+			echo "$filesize 1024 $fullPath" | awk '{printf("备份文件全路径是:%s,文件大小:%0.5fkb\n", $3, $1/$2)}'
+			echo 备份迁移完成...
+			return 0
+		else
+			echo 未知原因,无法备份迁移...
+			return -1
+		fi
+
+	else
+		echo $2
+                echo $3
+        fi
+
+        return -1
+}
+
+function manageDumpData () {
+	echo $1 $2 $3 $4
+	filePath="/mnt/sql/$(date +%Y%m%d)/"
+	if [ ! -x "$filePath" ];then
+		echo 正在创建$filePath文件夹
+		mkdir -p "$filePath"
+		echo 创建完成...
+	fi
+
+	echo $filePath$3.json
+
+	if [ ! -x "$1" ];then
+		echo 项目文件路径不存在,"$1"...
+		return -1
+	fi
+
+	cd "$1"
+	if [ "$2" == "all" ];then
+		echo 你选择的是备份项目数据库全部表格
+		if [ ! -f "$1manage.py" ];then
+			echo 项目路径下不存在"$1manage.py"
+			return -1
+		fi
+
+		python3 manage.py dumpdata > $filePath$3.json
+		
+		filesize=$(stat -c "%s" $filePath$3.json)
+
+		if [ $filesize -gt 0 ];then
+			fullPath=$filePath$3.json
+			echo "$fullPath $filesize 1024" | awk '{printf("备份文件全路径是:%1,文件大小:%0.5fkb\n", $1, $2/$3}'
+			echo 备份迁移完成...
+			return 0
+		else
+			echo 未知原因,无法备份迁移...
+			return -1
+		fi
+
+	elif [ "$2" == "app" ];then
+		echo 你选择备份Appname名称是:$4
+		python3 manage.py dumpdata $4 > $filePath$3.json
+		
+		filesize=$(stat -c "%s" $filePath$3.json)
+
+		if [ $filePath -gt 0 ];then
+			fullPath=$filePath$3.json
+			echo "$fullPath $filesize 1024" | awk '{printf("备份文件全路径是:%1,文件大小:%0.5fkb\n", $1, $2/$3}'
+			echo 备份迁移完成...
+			return 0
+		else
+			echo 未知原因,无法备份迁移...
+			return -1
+		fi
+	else
+		echo "YYYYY"
+
+		return 0
+	fi
+
+	return -1	
+
+}
+
+
+read -t 30 -p "请输入迁移方式(mysql自带方式[dump]或者Python方式[migrate],如果你选择的是mysql方式请再输入要备份的数据库名称[请按空格隔开,30秒完成输入]):" migrate dbname
+echo "$migrate" $dbname
+if [ ! $migrate ];then
+	migrate="dump"
+	dbname='Ansjer'
+fi
+
+if [ "$migrate" == "dump" ];then
+    echo 你选择的是MySQL备份方式,并且你要备份的数据库是:$dbname
+    read -t 30 -p "请先输入文件名称,然后选择备份所有数据[all] 或者备份其中一个表格[table],如果选择的备份其中一个表格请再输入表格名称[每个输入用表格隔开]" filename database tablename
+    echo ddde, $database $filename $tablename
+    filename=${filename:-dump} #当变量a为null或为空字符串时则var=b var=${a:-b}
+    database=${database:-all}
+    mysqlDump $dbname $database $filename $tablename
+    echo $?
+elif [ "$migrate" == "migrate" ];then
+    echo 你选择的是Python方式备份迁移数据库...
+    projPath="/mnt/Sharing/Ansjer/"
+    read -t 30 -p "(请先输入要备份的文件名称,然后是选择要备份appname或者备份全部,如果全部清输入[all],或者输入[app]再输入appnname):" filename database appname
+    filename=${filename:-dump}
+    database=${database:-all}
+    manageDumpData $projPath $database $filename $appname
+    echo $?
+else
+    echo ay
+fi

+ 33 - 0
Ansjer/test/cloudfront_sign_url.py

@@ -0,0 +1,33 @@
+import datetime
+
+from cryptography.hazmat.backends import default_backend
+from cryptography.hazmat.primitives import hashes
+from cryptography.hazmat.primitives import serialization
+from cryptography.hazmat.primitives.asymmetric import padding
+from botocore.signers import CloudFrontSigner
+
+
+def rsa_signer(message):
+    with open('D:/project_svn/Ansjer/test/pk-APKAINI6BNPKV54NHH7Q.pem', 'rb') as key_file:
+        private_key = serialization.load_pem_private_key(
+            key_file.read(),
+            password=None,
+            backend=default_backend()
+        )
+    signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1())
+    signer.update(message)
+    return signer.finalize()
+
+
+key_id = 'APKAINI6BNPKV54NHH7Q'
+url = 'http://d3om3d8c0l14oc.cloudfront.net/L59KVYDAEPHR1T6M111A_0/*'
+
+expire_date = datetime.datetime(2018, 9, 30)
+print(expire_date)
+cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
+
+# Create a signed url that will be valid until the specfic expiry date
+# provided using a canned policy.
+signed_url = cloudfront_signer.generate_presigned_url(
+    url, date_less_than=expire_date)
+print(signed_url)

+ 71 - 0
Ansjer/test/encryDownLoad.py

@@ -0,0 +1,71 @@
+# coding=utf-8
+# + + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + +
+#        ┏┓   ┏┓+ +
+#    ┏┛┻━━━┛┻┓ + +
+#    ┃       ┃  
+#    ┃   ━   ┃ ++ + + +
+#    ████━████ ┃+
+#    ┃       ┃ +
+#    ┃   ┻   ┃
+#    ┃       ┃ + +
+#    ┗━┓   ┏━┛
+#      ┃   ┃           
+#      ┃   ┃ + + + +
+#      ┃   ┃    Codes are far away from bugs with the animal protecting   
+#      ┃   ┃ +     神兽保佑,代码无bug  
+#      ┃   ┃
+#      ┃   ┃  +         
+#      ┃    ┗━━━┓ + +
+#      ┃        ┣┓
+#      ┃        ┏┛
+#      ┗┓┓┏━┳┓┏┛ + + + +
+#       ┃┫┫ ┃┫┫
+#       ┗┻┛ ┗┻┛+ + + +
+# + + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + ++ + + +"""
+"""
+"""
+import base64
+import hashlib
+import time
+
+def md5(text, isBackByte=False):
+    """md5加密函数"""
+    md5 = hashlib.md5()
+    if isinstance(text, bytes):
+        md5.update(text)
+    else:
+        md5.update(text.encode('utf-8'))
+
+    if isBackByte:
+        # 返回二进制的加密结果
+        return md5.digest()
+
+        # 返回十六进制的机密结果
+    return md5.hexdigest()
+
+
+def base64_encode(text, isBytes=False):
+    """进行base64编码处理"""
+    if isBytes:
+        return base64.b64encode(text)
+    return base64.b64encode(bytes(text, encoding="utf-8"))
+
+
+def get_timestamp10():
+    """获取当前时间长度为10位长度的时间戳"""
+    return int(time.time())
+
+
+secret = 'ansjer';  # 密钥--对应#st的哈希格式为 secret+url+e,e为时间戳单位s,url为请求地址  secure_link_md5 xiaozhong.com$uri$arg_e;
+# path = '/hls/5553.mp4/index.m3u8'  # 下载文件
+# path = '/L59KVYDAEPHR1T6M111A_0/555666.mp4'  # 下载文件
+path = '/5553.mp4'  # 下载文件
+# path = '/444.mp4'  # 下载文件
+# 下载到期时间,time是当前时间,300表示300秒,也就是说从现在到300秒之内文件不过期
+expire = get_timestamp10() + 3600;
+res = md5(str(secret) + str(path) + str(expire), True)
+md5 = str(base64_encode(res, True))
+md5 = md5.replace('b\'', '').replace('\'', '').replace('+', '-').replace('/', '_').replace('=', '')
+
+# print('生成代相关认证签名的地址:','http://52.8.197.107/444.mp4.m3u8?' + 'st=' + str(md5) + '&e=' + str(expire))
+print('io:','http://52.8.197.107/5553.mp4.m3u8?' + 'st=' + str(md5) + '&e=' + str(expire))

+ 24 - 0
Ansjer/test/m3u8_generate.py

@@ -0,0 +1,24 @@
+#!/usr/bin/env python3  
+# -*- coding: utf-8 -*-  
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: Ansjer
+@software: PyCharm
+@DATE: 2018/5/28 16:15
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: m3u8_generate.py
+@Contact: chanjunkai@163.com
+"""
+from m3u8_generator import PlaylistGenerator
+#pip install m3u8-generator
+playlist_entries = [
+    {
+        'name': "http://d3596w5a6euckc.cloudfront.net/vod/2N1K3LE78TYJ38CE111A_99/1234.ts?Expires=1538265600&Signature=czbcIzioBcb3K7F8v5QvKNRJ9af9022O3e9ils4bTsA2O4LSR6UxF1uLCvykHsVrdLZiYt3f5dW1Njb2qWJu1nB6N9lPUIfJTNEuD9Z3SyxEboM0Cvb34MWpFe94vdWIIas1x0bdwTGWb-yX34XJgxSMhkO9ZA5Avzvl3OALoWcoIdyvniXA5x9bgcmFu5aXXN1Fy1u4lPYQgDUGHOc-hiyZP7yY2btl0dViEjEX76n9eS067nAwAGM4zV0Ga4surZ99tyfOIsjLjRieNOzMMfYLnMXxndFRXgYUF~uVIsxOfJ5Q4QkJBakfx2Vxv4y5ZfX09ajtkGu0qfybWPs0xA__&Key-Pair-Id=APKAINI6BNPKV54NHH7Q",
+        'duration': '2',
+    }
+]
+
+playlist = PlaylistGenerator(playlist_entries).generate()
+print(playlist)

+ 113 - 0
Ansjer/test/signCookie.py

@@ -0,0 +1,113 @@
+from boto.cloudfront.distribution import Distribution
+from cryptography.hazmat.primitives.asymmetric import padding
+from cryptography.hazmat.primitives import serialization
+from cryptography.hazmat.backends import default_backend
+from cryptography.hazmat.primitives import hashes
+import base64
+import datetime
+from var_dump import var_dump
+import time
+
+
+class BetterThanBoto(Distribution):
+
+    def sign_rsa(self, message):
+        private_key = serialization.load_pem_private_key(self.keyfile, password=None,
+                                                         backend=default_backend())
+        signer = private_key.signer(padding.PKCS1v15(), hashes.SHA1())
+        message = message.encode('utf-8')
+        signer.update(message)
+        return signer.finalize()
+
+    def _sign_string(self, message, private_key_file=None, private_key_string=None):
+        if private_key_file:
+            self.keyfile = open(private_key_file, 'rb').read()
+        elif private_key_string:
+            self.keyfile = private_key_string.encode('utf-8')
+        return self.sign_rsa(message)
+
+    @staticmethod
+    def _url_base64_encode(msg):
+        """
+        Base64 encodes a string using the URL-safe characters specified by
+        Amazon.
+        """
+        msg_base64 = base64.b64encode(msg).decode('utf-8')
+        msg_base64 = msg_base64.replace('+', '-')
+        msg_base64 = msg_base64.replace('=', '_')
+        msg_base64 = msg_base64.replace('/', '~')
+        return msg_base64
+
+    def generate_signature(self, policy, private_key_file=None):
+        """
+        :param policy: no-whitespace json str (NOT encoded yet)
+        :param private_key_file: your .pem file with which to sign the policy
+        :return: encoded signature for use in cookie
+        """
+        # Distribution._create_signing_params()
+        signature = self._sign_string(policy, private_key_file)
+
+        # now base64 encode the signature & make URL safe
+        encoded_signature = self._url_base64_encode(signature)
+
+        return encoded_signature
+
+    def create_signed_cookies(self, url, private_key_file=None, keypair_id=None,
+                              expires_at=20, secure=True):
+        policy = self._custom_policy(
+            url,
+            expires_at
+        )
+
+        encoded_policy = self._url_base64_encode(policy.encode('utf-8'))
+        signature = self.generate_signature(
+            policy, private_key_file=private_key_file
+        )
+        cookies = {
+            "CloudFront-Policy": encoded_policy,
+            "CloudFront-Signature": signature,
+            "CloudFront-Key-Pair-Id": keypair_id
+        }
+        return cookies
+
+
+def sign_to_cloudfront(object_url, expires_at):
+    """ Sign URL to distribute file"""
+    cf = BetterThanBoto()
+    url = cf.create_signed_url(url=object_url,
+                               keypair_id="APKAINI6BNPKV54NHH7Q",
+                               expire_time=expires_at,
+                               private_key_file="D:/project_svn/Ansjer/test/pk-APKAINI6BNPKV54NHH7Q.pem")
+
+    return url
+
+
+def create_signed_cookies(object_url, expires_at):
+    """
+    Create a signed cookie
+    """
+    cf = BetterThanBoto()
+
+    cookies = cf.create_signed_cookies(url=object_url, keypair_id="APKAINI6BNPKV54NHH7Q", expires_at=expires_at,
+                                       private_key_file="D:/project_svn/Ansjer/test/pk-APKAINI6BNPKV54NHH7Q.pem")
+    return cookies
+
+
+expire_date = int(time.time()) + 7200
+
+object_url = 'http://d3596w5a6euckc.cloudfront.net/vod/2N1K3LE78TYJ38CE111A_99/1527152855.m3u8'
+# object_url = 'http://d3596w5a6euckc.cloudfront.net/vod/2N1K3LE78TYJ38CE111A_99/*'
+# cookie_data = create_signed_cookies(object_url, expire_date)
+# print(cookie_data)
+# exit()
+cookie_data = {'CloudFront-Policy': 'eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QzNTk2dzVhNmV1Y2tjLmNsb3VkZnJvbnQubmV0L3ZvZC8yTjFLM0xFNzhUWUozOENFMTExQV85OS8qIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNTI3NTA1MDA1fX19XX0_', 'CloudFront-Signature': 'IQYo7PdwXLRyEywSon6HBvuaEOLqTGH6qWAx1Fk3HrSK6N325f0oXcvpZ1eSVUv353YUrd6bKPDE9tLEOPuIitILNQt5tP593C5OIX4jc15RpUpTuEQdlVlO7~SfnxtHXIqukD20GXWIfCagneNj1~F2OD5Tn8ER2stJY1IK~v12VPXAA-cWqoKc6WyVZfzJs0SkJIfQDeDtSOkKD0fP8TOBM2i4XQzbcl9NviNrueG-bZwrCondlw6K5g4TOVS41QQplEIOwb1AzxBb8QvDXxaQ-Kcmy5ME-vpfdBqdHrgreAGZIliZyLWA3qIJ71w67YIzsnCvCMytULDE7w-d4Q__', 'CloudFront-Key-Pair-Id': 'APKAINI6BNPKV54NHH7Q'}
+
+print(cookie_data)
+import requests
+
+cookies = cookie_data
+headers = {}
+# exit()
+s = requests.Session()
+res = s.get(object_url, headers=headers, cookies=cookies)
+print(res.text)

+ 140 - 0
Ansjer/test/testa.py

@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+# -*- coding: utf-8 -*-
+import struct
+import boto3
+from boto3.session import Session
+from datetime import datetime
+import time
+from requests_aws4auth import AWS4Auth
+import requests
+import chunk
+from botocore.client import Config
+print(datetime(2015, 1, 1))
+print(time.time())
+# exit()
+aws_key = 'AKIAJYSIOA24FQANOFTA'
+aws_secret = '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'
+# aws_key = 'AKIAIK7LP7TRWPFTRWVA'
+# aws_secret = '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'
+session = Session(
+    aws_access_key_id=aws_key,
+    aws_secret_access_key=aws_secret,
+    region_name='us-east-1',
+)
+
+'''
+s3
+'''
+s3_con = boto3.client(
+    's3', aws_access_key_id=aws_key, aws_secret_access_key=aws_secret,
+    config=Config(signature_version='s3v4'), region_name='us-east-1'
+)
+url = s3_con.generate_presigned_post(
+    Key='img.jpg',
+    ExpiresIn=7200,
+    Bucket='ansjertest'
+)
+print(url)
+exit()
+url = s3_con.generate_presigned_url(
+    'put_object',
+    Params={
+        'Bucket': 'ansjertest',
+        'Key': 'img.jpg',
+        # 'ContentType': 'image/jpg'
+    },
+    ExpiresIn=3600,
+    HttpMethod='PUT'
+)
+print(url)
+exit()
+S3_client = session.client('s3')
+response = S3_client.generate_presigned_url(
+    'put_object',
+    Params={
+        'Bucket': 'ansjertest',
+        'Key': 'img.jpg',
+        # 'ContentType': 'image/jpg'
+    },
+    ExpiresIn=3600,
+    # HttpMethod='PUT'
+)
+print(response)
+
+exit()
+S3_client = session.client('s3')
+response = S3_client.generate_presigned_url(
+    'get_object',
+    Params={
+        'Bucket': 'ansjertest',
+        'Key': '2N1K3LE78TYJ38CE111A_3/2N1K3LE78TYJ38CE111A_3-1524557834.mp4'
+    },
+    ExpiresIn=3600
+)
+print(response)
+exit()
+
+kinesis_client = session.client('kinesisvideo')
+
+response = kinesis_client.get_data_endpoint(
+    StreamName='demo-stream',
+    APIName='GET_MEDIA_FOR_FRAGMENT_LIST'
+)
+endpoint = response['DataEndpoint'] + '/getMediaForFragmentList'
+print(endpoint)
+data = {
+    "Fragments": ["91343852333181432407537343081996969589651220552"],
+    "StreamName": "demo-stream"
+}
+
+auth = AWS4Auth(aws_key, aws_secret, 'us-east-1', 'kinesisvideo')
+headers = {'Content-type': 'application/json'}
+response = requests.post(endpoint, json=data, auth=auth, headers=headers)
+# test=chunk.Chunk(response.text.encode('utf8'))
+print(response.headers)
+exit()
+
+stream_bytes = response.text.encode('utf8')
+print(response.text.encode('utf8'))
+print('3333')
+exit()
+# url = "网络zip的地址"
+# path = "你本地的地址"
+#
+# req = urllib2.urlopen(url)
+# data = req.read()
+# with open(path, "wb") as zip:
+#     zip.write(data)
+# req.close()
+# ##-----------------------------------------------------------------------------------------
+
+
+exit()
+response_describe_stream = kinesis_client.describe_stream(
+    StreamName='demo-stream',
+)
+print(response_describe_stream)
+# exit()
+response = kinesis_client.get_data_endpoint(
+    StreamName='demo-stream',
+    APIName='GET_MEDIA'
+)
+print(response)
+
+# exit()
+print('-----------')
+print(response['DataEndpoint'])
+
+kinesis_video_media_client = session.client('kinesis-video-media')
+response_media = kinesis_video_media_client.get_media(
+    StreamName='demo-stream',
+    StartSelector={
+        'StartSelectorType': 'EARLIEST ',
+    }
+)

+ 4 - 9
Ansjer/test/util/encryDownLoad.py

@@ -55,17 +55,12 @@ def get_timestamp10():
     """获取当前时间长度为10位长度的时间戳"""
     return int(time.time())
 
-
-secret = 'ansjer';  # 密钥--对应#st的哈希格式为 secret+url+e,e为时间戳单位s,url为请求地址  secure_link_md5 xiaozhong.com$uri$arg_e;
-# path = '/hls/5553.mp4/index.m3u8'  # 下载文件
-# path = '/L59KVYDAEPHR1T6M111A_0/555666.mp4'  # 下载文件
-path = '/5553.mp4'  # 下载文件
-# path = '/444.mp4'  # 下载文件
+url = 'http://192.168.136.45:8077'
+secret = 'ansjer';  # 密钥--对应#st的哈希格式为 secret+url+e,e为时间戳单位s,url为请求地址
+path = '/OTA/downloads/IPC/18E2012008A/4.1.5/V4.1.5.18E2012008A.img'  # 下载文件
 # 下载到期时间,time是当前时间,300表示300秒,也就是说从现在到300秒之内文件不过期
 expire = get_timestamp10() + 3600;
 res = md5(str(secret) + str(path) + str(expire), True)
 md5 = str(base64_encode(res, True))
 md5 = md5.replace('b\'', '').replace('\'', '').replace('+', '-').replace('/', '_').replace('=', '')
-
-# print('生成代相关认证签名的地址:','http://52.8.197.107/444.mp4.m3u8?' + 'st=' + str(md5) + '&e=' + str(expire))
-print('io:','http://52.8.197.107/5553.mp4.m3u8?' + 'st=' + str(md5) + '&e=' + str(expire))
+print(url+path+'?' + 'st=' + str(md5) + '&e=' + str(expire))

+ 94 - 78
Ansjer/urls.py

@@ -1,124 +1,140 @@
 from django.contrib import admin
 from django.conf.urls import url
-from django.urls import path,re_path
+from django.urls import path
+# from django.views.generic.base import RedirectView
 from Controller import FeedBackInfo, EquipmentOTA, EquipmentInfo, EquipmentSensor, StreamMedia, AdminManage, AppInfo, \
-    AccessLog, Test, MealManage, DeviceMeal, HlsManage, DeviceManage, EquipmentStatus, SysManage,DeviceLog,LogAccess,EquipmentManager,LogManager,PermissionManager,OTAEquipment,shareUserPermission,UserManger, CheckUserData, OauthManage,UserController
+    AccessLog, Test, MealManage, DeviceMeal, HlsManage, DeviceManage, EquipmentStatus, SysManage,DeviceLog,LogAccess,EquipmentManager,LogManager,PermissionManager,OTAEquipment,BatchProcessingDatabase,shareUserPermission,UserManger, CheckUserData
 
 urlpatterns = [
-    url(r'^account/authcode$', UserController.authCodeView.as_view()),
-    url(r'^account/register$', UserController.registerView.as_view()),
-    url(r'^account/login$', UserController.LoginView.as_view()),
-    url(r'^account/logout$', UserController.LogoutView.as_view(), name='logout_user'),
-    url(r'^account/changePwd$', UserController.ChangePwdView.as_view(), name='change_password'),
-    url(r'^account/forget$', UserController.ForgetPwdView.as_view(), name='forget_password'),
-    url(r'^accounts/email-re-pwd/$', UserController.EmailResetPwdView.as_view()),
-
-    ###
     url(r'^admin/', admin.site.urls),
+    # url(r'^favicon.ico$', RedirectView.as_view(url=r'favicon.ico', permanent=True)),
     url(r'^favicon.ico$', UserManger.success, name=u'favicon.ico'),
-    url(r'^account/showUserMore$', UserManger.showUserMoreView.as_view()),
-    url(r'^account/perfectUserInfo$', UserManger.perfectUserInfoView.as_view()),
-    url(r'^account/getAvatar/(?P<filePath>.*)$', UserManger.getAvatarView.as_view()),
-    url(r'^account/delUser$', UserManger.delUserInterface),
-    url(r'^account/setUserValid$', UserManger.setUserValidView.as_view()),
-    url(r'^account/showAllUser$', UserManger.showAllUserInterface),
-    url(r'^account/help$', LogManager.HelpView.as_view()),
-    url(r'^account/searchUser$', shareUserPermission.searchUserView.as_view()),
-    url(r'^account/shareUserEquipment$', shareUserPermission.shareUserEquipmentView.as_view()),
-    url(r'^account/unsharedUserEquipment$', shareUserPermission.unsharedUserEquipmentView.as_view()),
+    url(r'^$', UserManger.LoginView.as_view(), name='login'),
+    url(r'^account/login$', UserManger.LoginView.as_view(), name='login_user'),
+    url(r'^account/logout$', UserManger.LogoutView.as_view(), name='logout_user'),
+    url(r'^account/authcode$', UserManger.getAuthCodeView.as_view(), name='auth_code'),
+    url(r'^account/register$', UserManger.registerView.as_view(), name='register_user'),
+    url(r'^account/changePwd$', UserManger.ChangePwdView.as_view(), name='change_password'),
+    url(r'^account/active/(?P<active_code>.*)$', CheckUserData.ActiveUserView.as_view(), name='user_active'),
+    # 配置激活账户链接
+    url(r'^account/forget$', UserManger.ForgetPwdView.as_view(), name='forget_password'),
+    url(r'^account/activate/(?P<token>\w+.[-_\w]*\w+.[-_\w]*\w+)$', CheckUserData.Active_User, name='active_user'),
+    url(r'^account/password/edit$', UserManger.ResetPwdView.as_view(), name='reset_password'),
+    url(r'^account/password/mobiletoResetPwd$', CheckUserData.MobiletoResetPwdView.as_view(),
+        name='Mobile_Reset_Password'),
+    url(r'^account/modifyPwd$', CheckUserData.ModifyPwdView.as_view(), name="modify_password"),
+    url(r'^account/showUserMore$', UserManger.showUserMoreView.as_view(), name='show_User_More'),
+    url(r'^account/perfectUserInfo$', UserManger.perfectUserInfoView.as_view(), name=u'Perfect_User_Info'),
+    url(r'^account/getAvatar/(?P<filePath>.*)$', UserManger.getAvatarView.as_view(), name=u'get_Avatar'),
+    url(r'^account/delUser$', UserManger.delUserInterface, name=u'del_User'),
+    url(r'^account/setUserValid$', UserManger.setUserValidView.as_view(), name=u'set_User_Valid'),
+    url(r'^account/showAllUser$', UserManger.showAllUserInterface, name=u'show_All_User'),
+    url(r'^account/help$', LogManager.HelpView.as_view(), name=u'help_info'),
+    url(r'^account/searchUser$', shareUserPermission.searchUserView.as_view(), name=u'search_User'),
+    url(r'^account/shareUserEquipment$', shareUserPermission.shareUserEquipmentView.as_view(),
+        name=u'share_User_Equipment'),
+    url(r'^account/unsharedUserEquipment$', shareUserPermission.unsharedUserEquipmentView.as_view(),
+        name=u'unshared_User_Equipment'),
 
-    url(r'^response/success$', UserManger.success),
+    url(r'^response/success$', UserManger.success, name=u'success_info'),
     # http://13.56.215.252:82/equipment/queryUserEquipment?token=test
-    url(r'^equipment/queryUserEquipment$', EquipmentManager.queryUserEquipmentInterface),
+    url(r'^equipment/queryUserEquipment$', EquipmentManager.queryUserEquipmentInterface, name='query_User_Equipment'),
     url(r'^equipment/addNewUserEquipment$', EquipmentManager.addNewUserEquipmentInterface,
         name='add_New_User_Equipment'),
-    url(r'^equipment/delUserEquipment$', EquipmentManager.delUserEquipmentInterface),
+    url(r'^equipment/delUserEquipment$', EquipmentManager.delUserEquipmentInterface, name='del_User_Equipment'),
     url(r'^equipment/modifyUserEquipment$', EquipmentManager.modifyUserEquipmentInterface,
         name='modify_User_Equipment'),
     url(r'^equipment/showAllUserEquipment$', EquipmentManager.showAllUserEquipmentInterface,
         name='show_All_User_Equipment'),
-    url(r'^equipment/findEquipmentInfo$', EquipmentManager.findEquipmentInfoInterface),
+    url(r'^equipment/findEquipmentInfo$', EquipmentManager.findEquipmentInfoInterface, name='find_User_Equipment'),
+
+    url(r'^OTA/uploads$', OTAEquipment.getUploadFiletoDirView.as_view(), name=u'uploads_updata_file'),
+    url(r'^OTA/download$', OTAEquipment.downloadUpdataFileUrl, name='downloads_updata_file_backup'),
+    url(r'^OTA/downloads/(\w+)/(\w+[\w+]*.+[^_w]*.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface,
+        name='downloads_updata_file'),
+    url(r'^OTA/getEquipmentVersion$', OTAEquipment.getEquipmentVersionInterface, name=u'get_equipment_version$'),
+    url(r'^OTA/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface, name=u'get_updata_file_Url'),
+    url(r'^OTA/addNewEquipmentVersion$', OTAEquipment.addNewEquipmentVersionInterface, name=u'add_New_EquipmentVersion'),
+    url(r'^OTA/showAllEquipmentVersion$', OTAEquipment.showAllEquipmentVersionInterface, name=u'show_All_Equipment_Version'),
 
-    url(r'^OTA/uploads$', OTAEquipment.getUploadFiletoDirView.as_view()),
-    url(r'^OTA/download$', OTAEquipment.downloadUpdataFileUrl),
-    url(r'^OTA/downloads/(\w+)/(\w+[\w+]*.+[^_w]*.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface),
-    url(r'^OTA/getEquipmentVersion$', OTAEquipment.getEquipmentVersionInterface),
-    url(r'^OTA/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface),
-    url(r'^OTA/addNewEquipmentVersion$', OTAEquipment.addNewEquipmentVersionInterface),
-    url(r'^OTA/showAllEquipmentVersion$', OTAEquipment.showAllEquipmentVersionInterface),
+    url(r'^toekn/refreshToken$', UserManger.refreshTokenView.as_view(), name=u'refresh_token'),
 
-    url(r'^roles/addNewRole$', PermissionManager.addNewRoleView.as_view()),
-    url(r'^roles/queryRole$', PermissionManager.queryRoleView.as_view()),
-    url(r'^roles/delRole$', PermissionManager.delRoleView.as_view()),
-    url(r'^roles/modifyRole$', PermissionManager.modifyRoleView.as_view()),
-    url(r'^perms/addNewPerms$', PermissionManager.addNewPermsView.as_view()),
-    url(r'^perms/delPerms$', PermissionManager.delPermsView.as_view()),
-    url(r'^perms/queryPerms$', PermissionManager.queryPermsView.as_view()),
-    url(r'^perms/modifyPerms$', PermissionManager.modifyPermsView.as_view()),
-    url(r'^permsManager/queryRolePerms$', PermissionManager.queryRolePermsView.as_view()),
+    url(r'^import/batchAddEquipment$', BatchProcessingDatabase.batchAddEquipmentView.as_view(),
+        name=u'batch_Add_Equipment'),
 
-    url(r'^uploads/upgrade$', OTAEquipment.getUploadFiletoDirView.as_view()),
-    url(r'^upgrade/download/(\w+.[^_w]*\w+.\w+)$', CheckUserData.download_file),
-    url(r'^downloads/upgrade/(\w+)/(\w+.[^_w]*\w+.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface),
-    url(r'^getOTAurl/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface),
+    url(r'^roles/addNewRole$', PermissionManager.addNewRoleView.as_view(), name=u'Add_New_Role'),
+    url(r'^roles/queryRole$', PermissionManager.queryRoleView.as_view(), name=u'Query_Role'),
+    url(r'^roles/delRole$', PermissionManager.delRoleView.as_view(), name=u'del_Role'),
+    url(r'^roles/modifyRole$', PermissionManager.modifyRoleView.as_view(), name=u'modify_Role'),
+    url(r'^perms/addNewPerms$', PermissionManager.addNewPermsView.as_view(), name=u'add_New_Perms'),
+    url(r'^perms/delPerms$', PermissionManager.delPermsView.as_view(), name=u'del_Perms'),
+    url(r'^perms/queryPerms$', PermissionManager.queryPermsView.as_view(), name=u'query_Perms'),
+    url(r'^perms/modifyPerms$', PermissionManager.modifyPermsView.as_view(), name=u'modify_Perms'),
+    url(r'^permsManager/queryRolePerms$', PermissionManager.queryRolePermsView.as_view(), name=u'query_Role_Perms'),
+
+    url(r'^uploads/upgrade$', OTAEquipment.getUploadFiletoDirView.as_view(), name=u'upload_upgrade'),
+    url(r'^upgrade/download/(\w+.[^_w]*\w+.\w+)$', CheckUserData.download_file, name='download_upgrade'),
+    url(r'^downloads/upgrade/(\w+)/(\w+.[^_w]*\w+.\w+)$', OTAEquipment.downloadUpdataFileUrlInterface,
+        name='downloads_upgrade'),
+    url(r'^getOTAurl/getUpdataFileUrl$', OTAEquipment.getUpdataFileUrlInterface, name=u'get_updata_file_Url'),
 
     #  流处理
-    url(r'^media/stream', StreamMedia.StreamMedia.as_view()),
-    url(r'^media/auth_stream', StreamMedia.Auth_Stream),
-    url(r'^media/send_video_s3', StreamMedia.send_video_s3),
-    url(r'^media/auth_live', StreamMedia.Auth_Live),
+    url(r'^media/stream', StreamMedia.StreamMedia.as_view(), name=u'media_stream'),
+    url(r'^media/auth_stream', StreamMedia.Auth_Stream, name=u'auth_stream'),
+    url(r'^media/send_video_s3', StreamMedia.send_video_s3, name=u'auth_stream'),
+    url(r'^media/auth_live', StreamMedia.Auth_Live, name=u'auth_live'),
+    # url(r'^media/push_flv_s3', StreamMedia.push_flv_s3, name=u'push_flv_s3'),
     # 传感器
-    url(r'^equipment/sensor', EquipmentSensor.EquipmentSensor.as_view()),
+    url(r'^equipment/sensor', EquipmentSensor.EquipmentSensor.as_view(), name=u'equiment_sensor'),
     # 设备推送信息
-    url(r'^equipment/info', EquipmentInfo.EquipmentInfo.as_view()),
+    url(r'^equipment/info', EquipmentInfo.EquipmentInfo.as_view(), name=u'equiment_info'),
     # 管理员专属view
-    url(r'^adminManage/manage', AdminManage.AdminManage.as_view()),
+    url(r'^adminManage/manage', AdminManage.AdminManage.as_view(), name=u'adminManage'),
     # OTA重构类
-    url(r'^equipment/OTA', EquipmentOTA.EquipmentOTA.as_view()),
+    url(r'^equipment/OTA', EquipmentOTA.EquipmentOTA.as_view(), name=u'equipmentOTA'),
     # 用户反馈信息
-    url(r'^feedbackInfo', FeedBackInfo.FeedBackInfo.as_view()),
+    url(r'^feedbackInfo', FeedBackInfo.FeedBackInfo.as_view(), name=u'feedbackInfoView'),
     # app版本信息
-    url(r'^appInfo', AppInfo.AppInfo.as_view()),
+    url(r'^appInfo', AppInfo.AppInfo.as_view(), name=u'AppInfo'),
     # 访问日志new
-    url(r'^accesslog', AccessLog.AccessLog.as_view()),
+    url(r'^accesslog', AccessLog.AccessLog.as_view(), name=u'AccessLog'),
+
     # 套餐信息管理
-    url(r'^meal/manage', MealManage.MealManage.as_view()),
+    url(r'^meal/manage', MealManage.MealManage.as_view(), name=u'MealManage'),
     # 设备套餐绑定
-    url(r'^device/meal$', DeviceMeal.DeviceMeal.as_view()),
+    url(r'^device/meal$', DeviceMeal.DeviceMeal.as_view(), name=u'DeviceMeal'),
     # hls put_object签名url
-    url(r'^HlsManage$', HlsManage.HlsManage.as_view()),
+    url(r'^HlsManage$', HlsManage.HlsManage.as_view(), name=u'get_sign_put_object'),
     # 设备管理
-    url(r'^device/manage$', DeviceManage.DeviceManage.as_view()),
+    url(r'^device/manage$', DeviceManage.DeviceManage.as_view(), name=u'device_manage'),
     # 设备在线
-    url(r'^device/online$', EquipmentStatus.EquipmentOnline),
+    url(r'^device/online$', EquipmentStatus.EquipmentOnline, name=u'device_online'),
     # 设备离线
-    url(r'^device/offline$', EquipmentStatus.EquipmentOffline),
+    url(r'^device/offline$', EquipmentStatus.EquipmentOffline, name=u'device_offline'),
     # 设备离线
-    url(r'^device/updateIP$', EquipmentStatus.updateIP),
+    url(r'^device/updateIP$', EquipmentStatus.updateIP, name=u'device_updateIP'),
     # 系统ctr
-    url(r'^sys/updateLog', SysManage.updateLog),
+    url(r'^sys/updateLog', SysManage.updateLog, name=u'sys_update_log'),
     # 设备日志
-    url(r'^devices/(\w+)/logs$', DeviceLog.DeviceLog),
-    url(r'^devices/(\w+)$', DeviceManage.Devices),
+    url(r'^devices/(\w+)/logs$', DeviceLog.DeviceLog, name=u'device_log'),
+    url(r'^devices/(\w+)$', DeviceManage.Devices, name=u'device_log'),
     # 访问日志 mongodb版
-    url(r'^LogAccess$', LogAccess.LogAccess),
+    url(r'^LogAccess$', LogAccess.LogAccess, name=u'device_log'),
     # 上传操作文档
-    url(r'^HelpCHM/upload$', LogManager.upload_help_chm),
-    url(r'^admin/userIDs$', AdminManage.getUserIds),
+    url(r'^HelpCHM/upload$', LogManager.upload_help_chm, name=u'upload_help'),
+    url(r'^admin/userIDs$', AdminManage.getUserIds, name=u'getUserIds'),
+
+
+
+
     # 统计访问日志路径
     path('access/staticPath/', AccessLog.statisticsPath),
     # 多条件搜索用户信息admin
     path('accounts', AdminManage.search_user_by_content),
     # 测试专用api
-    path('Test', Test.Test.as_view()),
+    path('Test', Test.Test.as_view(), name=u'Test'),
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),
-    # 认证服务器登陆成功,访问一次关联,并获取用户信息
-    path('oauth/relate/',OauthManage.OauthRelateView.as_view()),
-    # 认证服务去
-    path('resource/auth/',OauthManage.OauthResUserView.as_view()),
-    path('resource/forgetauth/',OauthManage.OauthForgetView.as_view()),
-    # 认证服务修改密码关联旧数据
-    path('account/setPwd/', OauthManage.ModifyRSPwdView.as_view()),
-    re_path('(?P<path>.*)', LogManager.errorPath),
+    # path('oauth/login',OauthManage.OauthManage.as_view()),
+    url(r'^(?P<path>.*)', LogManager.errorPath, name=u'error_path'),
 ]

+ 111 - 72
Controller/AccessLog.py

@@ -1,24 +1,23 @@
-import datetime
-import simplejson as json
-
+from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
-from django.views.generic.base import View
-from ratelimit.decorators import ratelimit
-
-from Model.models import Access_Log
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.CommonService import CommonService
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.TemplateService import TemplateService
+from Model.models import Access_Log
+import datetime
+from Service.ResponseService import *
+from django.core import serializers
 
+import chardet
 '''
 http://192.168.136.40:8077/accesslog?operation=queryByAdmin&token=test&page=1&line=5&order=-id
 http://192.168.136.40:8077/accesslog?operation=truncateByAdmin&token=test
 http://192.168.136.40:8077/accesslog?operation=searchByAdmin&token=test&page=1&line=10&content={"status":20}&order=-id
-
-http://192.168.136.40:8077/accesslog/staticPath/?token=stest
+http://127.0.0.1:8000/accesslog?operation=loginUserNum&token=stest
+http://127.0.0.1:8000/accesslog/loginUserNum?token=stest
+http://127.0.0.1:8000/accesslog?operation=AllLoginArea&token=stest
+http://192.168.136.40:8077/access/staticPath?token=stest
 '''
 
 
@@ -27,39 +26,42 @@ class AccessLog(View):
     def dispatch(self, *args, **kwargs):
         return super(AccessLog, self).dispatch(*args, **kwargs)
 
-    def get(self, request):
-        response = ResponseObject()
+    def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
-        return self.validation(request.GET, response)
+        return self.validation(request_dict=request.GET)
 
-    def post(self, request):
-        response = ResponseObject()
+    def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
-        return self.validation(request.POST, response)
+        return self.validation(request_dict=request.POST)
 
-    def validation(self, request_dict, response):
+    def validation(self, request_dict, *args, **kwargs):
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 operation = request_dict.get('operation', None)
-                if userID is not None and operation is not None:
+                param_flag = CommonService.get_param_flag(data=[userID, operation])
+                if param_flag is True:
                     if operation == 'queryByAdmin':
-                        return self.query_by_admin(request_dict, userID, response)
+                        return self.query_by_admin(request_dict=request_dict, userID=userID)
                     elif operation == 'searchByAdmin':
-                        return self.search_by_admin(request_dict, userID, response)
+                        return self.search_by_admin(request_dict=request_dict, userID=userID)
                     elif operation == 'truncateByAdmin':
-                        return self.truncate_by_admin(userID, response)
-                return response.json(444, 'token,operation')
+                        return self.truncate_by_admin(userID=userID)
+                    elif operation == 'loginUserNum':
+                        return self.login_user_num(userID=userID)
+                    elif operation == 'AllLoginArea':
+                        return self.getAllLoginArea(userID=userID)
+
+                return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def query_by_admin(self, request_dict, userID, response):
+    def query_by_admin(self, request_dict, userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         order = request_dict.get('order', '-id')
@@ -73,33 +75,32 @@ class AccessLog(View):
                 if access_log_queryset.exists():
                     count = access_log_queryset.count()
                     res = access_log_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     send_json['count'] = count
-                    return response.json(0, send_json)
-                return response.json(0, {'datas': [], 'count': 0})
+                    return ResponseJSON(0,send_json)
+                return ResponseJSON(0, {'datas': [], 'count': 0})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    # 清空日志表
-    def truncate_by_admin(self, userID, response, ):
+    def truncate_by_admin(self, userID):
         check_perm = ModelService.check_permission(userID=userID, permID=10)
         if check_perm is True:
             from django.db import connection
             cursor = connection.cursor()
             cursor.execute("TRUNCATE TABLE `access_log`")
-        return response.json(0)
+        return ResponseJSON(0)
 
-    # 搜索日志(多条件)
-    def search_by_admin(self, request_dict, userID, response):
+    def search_by_admin(self, request_dict, userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         order = request_dict.get('order', '-id')
         content = request_dict.get('content', None)
         starttime = request_dict.get('starttime', None)
         endtime = request_dict.get('endtime', None)
-        if page is not None and line is not None:
+        param_flag = CommonService.get_param_flag(data=[page, line])
+        if param_flag is True:
             check_perm = ModelService.check_permission(userID=userID, permID=20)
             if check_perm is True:
                 try:
@@ -107,12 +108,13 @@ class AccessLog(View):
                     search_kwargs = CommonService.get_kwargs(data=content)
                     queryset = Access_Log.objects.filter(**search_kwargs).order_by(order)
                 except Exception as e:
-                    return response.json(444)
+                    return ResponseJSON(444)
                 if starttime is not None and starttime != '' and endtime is not None and endtime != '':
                     startt = datetime.datetime.fromtimestamp(int(starttime))
                     starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f")
                     endt = datetime.datetime.fromtimestamp(int(endtime))
                     endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f")
+                    # var_dump(starttime,endtime)
                     queryset = queryset.filter(time__range=(starttime, endtime))
                 elif starttime is not None and starttime != '':
                     startt = datetime.datetime.fromtimestamp(int(starttime))
@@ -125,17 +127,62 @@ class AccessLog(View):
                 if queryset.exists():
                     count = queryset.count()
                     res = queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     send_json['count'] = count
-                    return response.json(0, send_json)
-                return response.json(0, {'datas': [], 'count': 0})
+                    return ResponseJSON(0,send_json)
+                return ResponseJSON(0,{'datas': [], 'count': 0})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444, 'page,line')
+            return ResponseJSON(444)
+    # 获取登录用户的ip的登录情况的接口
+    def login_user_num(self,  userID):
+            check_perm = ModelService.check_permission(userID=userID, permID=20)
+            if check_perm is True:
+                user_list = Access_Log.objects.values("user","ip").distinct().filter(url__contains='account/login').order_by('time')
+                return ResponseJSON(10,list(user_list[0]))
+                # print("是否QuerySet")
+                # print(type(user_list).__name__=='QuerySet')
+                user_list= list(user_list)
+                newuser_list="["
+                count=0
+                for q in user_list:
+                    # print(type(q))
+                    # 获取ip地址中文名称
+                    ip_addrname=CommonService.getAddr(q['ip'])
+                    # print(ip_addrname)
+                    # 拼凑为字符串类型
+                    ip_addrname='{"ip_addrname":"'+ip_addrname+'"}'
+                    # 把字符串转为字典json
+                    ip_addrname=json.loads(ip_addrname)
+                    # 字典类型合并
+                    ip_addrnameall=dict(q, **ip_addrname)
+                    # print(ip_addrnameall)
+                    str_dict = json.dumps(ip_addrnameall)
+                    newuser_list=newuser_list+str_dict+","
+                    count+=1
+                newuser_list= newuser_list[:-1]+"]"
+                # 把字符串转为字典json
+                newuser_list = json.loads(newuser_list)
+                # print(newuser_list)
+                return ResponseJSON(0,{'datas':list(newuser_list), 'count': count})
+            else:
+                return ResponseJSON(404)
 
+ # 获取所有用户登录的地区
+    def getAllLoginArea(self, userID):
+        own_permission = ModelService.check_permission(userID=userID, permID=30)
+        if own_permission is True:
+            users = Access_Log.objects.filter(operation='account/login').distinct().values_list('user', flat=True)
+            ip_dict = {}
+            for user in users:
+                qs = Access_Log.objects.values_list('ip', flat=True).filter(operation='account/login',user=user).order_by('time')
+                ip_dict[user] = qs[0]
+            return ResponseJSON(0,ip_dict)
+        else:
+            return ResponseJSON(404)
 
-@ratelimit(key='ip', rate='3/m')
+@csrf_exempt
 def statisticsPath(request):
     request.encoding = 'utf-8'
     if request.method == 'GET':
@@ -143,28 +190,20 @@ def statisticsPath(request):
     if request.method == 'POST':
         request_dict = request.POST
     token = request_dict.get('token', None)
-    response = ResponseObject()
-    was_limited = getattr(request, 'limited', False)
-    # 限制同一个ip该接口一分钟不能访问超过两次
-    if was_limited is True:
-        return response.json(5)
     if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
-            own_perm = ModelService.check_permission(userID, 10)
-            if own_perm is True:
-                paths = TemplateService.log_api()
-                datas = {}
-                for path in paths:
-                    count = Access_Log.objects.filter(operation=path).count()
-                    datas[path] = count
-                return response.json(0, {'datas': datas})
-            else:
-                return response.json(404)
+        tokenManager = JSONTokenManager()
+        error_code = tokenManager.verify_AToken(token)
+        if error_code == 0:
+            userID = tokenManager.accessDict.get('userID', None)
+            own_perm = ModelService.check_permission(userID,10)
+            paths = TemplateService.log_api()
+            datas = {}
+            for path in paths:
+                count = Access_Log.objects.filter(operation=path).count()
+                datas[path] = count
+            return ResponseJSON(0, {'datas': datas})
         else:
-            return response.json(tko.code)
+            return HttpResponse(tokenManager.errorCodeInfo(error_code))
     else:
-        return response.json(444, 'token')
+        return ResponseJSON(311)
+

+ 75 - 78
Controller/AdminManage.py

@@ -3,21 +3,19 @@ from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView
 from django.utils.decorators import method_decorator
 from django.contrib.auth.hashers import make_password  # 对密码加密模块
+from Service.TokenManager import JSONTokenManager
 from Model.models import Device_Info,Role
 from Service.ModelService import ModelService
 from django.utils import timezone
-from Model.models import Access_Log,Device_User
+import datetime
+from Model.models import Access_Log
+from Service.ResponseService import *
 from django.views.decorators.http import require_http_methods
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Ansjer.config import OFF_LINE_TIME_DELTA
-import datetime,simplejson as json
-from Service.CommonService import CommonService
+from Ansjer.config import *
 '''
-http://192.168.136.40:8077/adminManage/manage?operation=getAllDeviceArea&token=debug
-http://192.168.136.40:8077/adminManage/manage?operation=getAllUserName&token=debug
-http://192.168.136.40:8077/adminManage/manage?operation=getAllUID&token=debug
-
+http://13.56.215.252:8222/adminManage/manage?operation=getAllDeviceArea&token=test
+http://13.56.215.252:8222/adminManage/manage?operation=getAllUserName&token=test
+http://13.56.215.252:8222/adminManage/manage?operation=getAllUID&token=test
 http://127.0.0.1:8000/adminManage/manage?operation=getAllOnLine&token=stest
 http://127.0.0.1:8000/adminManage/manage?operation=getOnLine&token=stest
 '''
@@ -37,70 +35,71 @@ class AdminManage(TemplateView):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
+
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 operation = request_dict.get('operation', None)
-                if userID is not None and operation is not None:
+                param_flag = CommonService.get_param_flag(data=[userID, operation])
+                if param_flag is True:
                     if operation == 'resetUserPwd':
                         return self.resetUserPwd(request_dict=request_dict, userID=userID)
                     if operation == 'getAllOnLine':
-                        return self.getAllOnLine(userID,response)
+                        return self.getAllOnLine(userID=userID)
                     if operation == 'getOnLine':
-                        return self.getOnLine(userID,response)
+                        return self.getOnLine(userID=userID)
                     if operation == 'getAllUserName':
-                        return self.getAllUserName(userID,response)
+                        return self.getAllUserName(userID=userID)
                     if operation == 'getStatisAccess':
-                        return self.getStatisAccess(userID,request_dict,response)
+                        return self.getStatisAccess(userID=userID,request_dict=request_dict)
                     if operation == 'getAllUID':
-                        return self.getAllUID(userID,response)
+                        return self.getAllUID(userID=userID)
                     if operation == 'getAllDeviceArea':
-                        return self.getAllDeviceArea(userID,response)
+                        return self.getAllDeviceArea(userID=userID)
                 else:
-                    return response.json(444,'operation')
+                    return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def resetUserPwd(self, request_dict, userID,response):
+    def resetUserPwd(self, request_dict, userID):
         own_permission = ModelService.check_permission(userID=userID, permID=50)
-        if own_permission:
+        if own_permission is True:
             duserID = request_dict.get('duserID', None)
             userPwd = request_dict.get('userPwd', None)
-            if duserID:
+            param_flag = CommonService.get_param_flag(data=[duserID])
+            if param_flag is True:
                 UserValid = Device_User.objects.filter(userID=duserID)
                 if UserValid:
                     if userPwd is None:
                         userPwd = '123456'
                     is_update = UserValid.update(password=make_password(userPwd))
                     if is_update:
-                        return response.json(0)
+                        return ResponseJSON(0)
                     else:
-                        return response.json(106)
+                        return ResponseJSON(106)
             else:
-                return response.json(444,'duserID')
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def getAllUserName(self, userID,response):
+    def getAllUserName(self, userID):
         # 权限固定为30
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
             username_list = Device_User.objects.all().values_list('username', flat=True)
             if username_list:
-                return response.json(0,{'username_list': list(username_list)})
+                return ResponseJSON(0,{'username_list': list(username_list)})
             else:
-                return response.json(0)
+                return ResponseJSON(0)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
     #    获取全部用户的在线个数
-    def getAllOnLine(self, userID,response):
+    def getAllOnLine(self, userID):
         # 权限固定为30
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
@@ -115,11 +114,11 @@ class AdminManage(TemplateView):
                     noonlinenum+=1
             print("在线人数:")
             print(onlinenum)
-            return response.json(0, {"onlinenum": onlinenum, "no_onlinenum": noonlinenum})
+            return ResponseJSON(0, {"onlinenum": onlinenum, "no_onlinenum": noonlinenum})
         else:
-            return response.json(404)
+            return ResponseJSON(404)
     #    获取全部用户的在线人数
-    def getOnLine(self, userID,response):
+    def getOnLine(self, userID):
         # 权限固定为30
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
@@ -142,12 +141,12 @@ class AdminManage(TemplateView):
                         noonlinenum += 1
             print("在线人")
             print(onlinenum)
-            return response.json(0, {"onlinenum": onlinenum,"no_onlinenum": noonlinenum})
+            return ResponseJSON(0, {"onlinenum": onlinenum,"no_onlinenum": noonlinenum})
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
     # 获取所有设备地区
-    def getAllDeviceArea(self, userID,response):
+    def getAllDeviceArea(self, userID):
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
             qs = Device_Info.objects.all().values('area','UID')
@@ -163,17 +162,17 @@ class AdminManage(TemplateView):
                         area_dict[v] += 1
                     else:
                         area_dict[v] = 1
-                return response.json(0,{'area':area_dict})
+                return ResponseJSON(0,{'area':area_dict})
             else:
-                return response.json(0)
+                return ResponseJSON(0)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
     '''
     统计一天访问量
     http://192.168.136.45:8077/adminManage/manage?token=test&operation=getStatisAccess&timestamp=1528773308
     '''
-    def getStatisAccess(self,userID,request_dict,response):
+    def getStatisAccess(self,userID,request_dict):
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
             time_stamp = int(request_dict.get('timestamp', None))
@@ -188,42 +187,42 @@ class AdminManage(TemplateView):
                     res[k] = count
                 else:
                     res[k] = 0
-            return response.json(0, {'count': res})
+            return ResponseJSON(0, {'count': res})
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def getAllUID(self,userID,response):
+    def getAllUID(self,userID):
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
             uid_list = Device_Info.objects.all().values_list('UID', flat=True)
             if uid_list:
-                return response.json(0, {'count': len(uid_list),'uid_list':list(uid_list)})
+                return ResponseJSON(0, {'count': len(uid_list),'uid_list':list(uid_list)})
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
+@csrf_exempt
 @require_http_methods(["GET"])
 def getUserIds(request):
     token = request.GET.get('token', None)
-    response = ResponseObject()
     if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
+        tokenManager = JSONTokenManager()
+        error_code = tokenManager.verify_AToken(token)
+        if error_code == 0:
+            userID = tokenManager.accessDict.get('userID', None)
             own_perm = ModelService.check_permission(userID,30)
             if own_perm is True:
                 # userID_list = Device_User.objects.all().values_list('userID', flat=True)
                 dn = Device_User.objects.all().values('userID', 'username')
-                return response.json(0,{"datas":list(dn)})
+                return ResponseJSON(0,{"datas":list(dn)})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(tko.code)
+            return HttpResponse(tokenManager.errorCodeInfo(error_code))
     else:
-        return response.json(311)
+        return ResponseJSON(311)
 
 @csrf_exempt
+# @require_http_methods(['GET'])
 def search_user_by_content(request):
     if request.method == 'GET':
         request_dict = request.GET
@@ -235,18 +234,16 @@ def search_user_by_content(request):
     content = request_dict.get('content', None)
     rstime = request_dict.get('rstime', None)
     retime = request_dict.get('retime', None)
-    response = ResponseObject()
     if page is not None and line is not None:
         page = int(page)
         line = int(line)
     else:
-        return response.json(10,'page,line is none')
+        return ResponseJSON(10,'page,line is none')
     if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
+        tokenManager = JSONTokenManager()
+        error_code = tokenManager.verify_AToken(token)
+        if error_code == 0:
+            userID = tokenManager.accessDict.get('userID', None)
             own_perm = ModelService.check_permission(userID,30)
             if own_perm is True:
                 check_perm = ModelService.check_permission(userID=userID, permID=20)
@@ -256,7 +253,7 @@ def search_user_by_content(request):
                         search_kwargs = CommonService.get_kwargs(data=content)
                         queryset = Device_User.objects.filter(**search_kwargs)
                     except Exception as e:
-                        return response.json(444,repr(e))
+                        return ResponseJSON(444,repr(e))
                     if rstime is not None and rstime != '' and retime is not None and retime != '':
                         startt = datetime.datetime.fromtimestamp(int(rstime))
                         rstime = startt.strftime("%Y-%m-%d %H:%M:%S.%f")
@@ -274,7 +271,7 @@ def search_user_by_content(request):
                     if queryset.exists():
                         count = queryset.count()
                         res = queryset[(page - 1) * line:page * line]
-                        sqlDict = CommonService.qs_to_dict(res)
+                        sqlDict = CommonService.query_set_to_dict(res)
                         for k, v in enumerate(sqlDict["datas"]):
                             if len(v['fields']['role']) > 0:
                                 role_query_set = Role.objects.get(rid=v['fields']['role'][0])
@@ -287,16 +284,16 @@ def search_user_by_content(request):
                                         if now_time > dl_time:
                                             sqlDict["datas"][k]['fields']['online'] = False
                         sqlDict['count'] = count
-                        return response.json(0, sqlDict)
-                    return response.json(0, {'datas': [], 'count': 0})
+                        return ResponseJSON(0, sqlDict)
+                    return ResponseJSON(0, {'datas': [], 'count': 0})
                 else:
-                    return response.json(404)
+                    return ResponseJSON(404)
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(tko.code)
+            return HttpResponse(tokenManager.errorCodeInfo(error_code))
     else:
-        return response.json(311)
+        return ResponseJSON(311)
 
 
 

+ 54 - 50
Controller/AppInfo.py

@@ -1,12 +1,13 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
-from Service.CommonService import CommonService
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
+from Service.CommonService import CommonService
 from Model.models import App_Info
 import traceback
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
+from Service.ResponseService import *
+
 '''
 http://192.168.136.45:8077/appInfo?operation=add&token=test&appBundleId=123456&appName=%E8%AF%BA%E5%9F%BA%E4%BA%9A1%E5%8F%B7&systemLanguage=US&content=dladfjklsjfdsajkdfasjkljlk&app_type=2&newAppversion=1234&bundleVersion=1234
 http://192.168.136.45:8077/appInfo?operation=update&token=test&appBundleId=1234&appName=%E8%AF%BA%E5%9F%BA%E4%BA%9A3%E5%8F%B7&systemLanguage=US&content=dladfjklsjfdsajkdfasjkljlk&app_type=2&newAppversion=555&id=6
@@ -30,47 +31,48 @@ class AppInfo(View):
 
     def validation(self, request_dict, *args, **kwargs):
         operation = request_dict.get('operation', None)
-        response = ResponseObject()
         if operation is not None:
             if operation == 'getAppNewVersion':
-                return self.getAppNewVersion(request_dict,response)
+                return self.getAppNewVersion(request_dict=request_dict)
             else:
                 token = request_dict.get('token', None)
                 if token is not None:
-                    tko = TokenObject(token)
-                    tko.valid()
-                    response.lang = tko.lang
-                    if tko.code == 0:
-                        userID = tko.userID()
-                        if userID is not None:
+                    tokenManager = JSONTokenManager()
+                    error_code = tokenManager.verify_AToken(token)
+                    if error_code == 0:
+                        userID = tokenManager.accessDict.get('userID', None)
+                        param_flag = CommonService.get_param_flag(data=[userID])
+                        if param_flag is True:
                             if operation == 'query':
-                                return self.query(request_dict, userID,response)
+                                return self.query(request_dict=request_dict, userID=userID)
                             elif operation == 'add':
-                                return self.add(request_dict, userID,response)
+                                return self.add(request_dict=request_dict, userID=userID)
                             elif operation == 'update':
-                                return self.update(request_dict, userID,response)
+                                return self.update(request_dict=request_dict, userID=userID)
                             elif operation == 'delete':
-                                return self.delete(request_dict, userID,response)
-                        return response.json(444,'userID')
+                                return self.delete(request_dict=request_dict, userID=userID)
+                        return ResponseJSON(444)
                     else:
-                        return response.json(tko.code)
+                        return HttpResponse(tokenManager.errorCodeInfo(error_code))
                 else:
-                    return response.json(311)
+                    return ResponseJSON(311)
         else:
-            return response.json(444,'operation')
+            return ResponseJSON(444)
 
-    def getAppNewVersion(self, request_dict,response):
+    def getAppNewVersion(self, request_dict):
         appBundleId = request_dict.get('appBundleId', None)
         app_type = request_dict.get('app_type', None)
-        if appBundleId is not None and app_type is not None:
+        # systemLanguage = request_dict.get('systemLanguage',None)
+        param_flag = CommonService.get_param_flag(data=[appBundleId, app_type])
+        if param_flag is True:
             try:
                 app_info = App_Info.objects.get(appBundleId=appBundleId, app_type=app_type)
             except Exception:
                 errorInfo = traceback.format_exc()
                 print(errorInfo)
-                return response.json(424, {'details': errorInfo})
+                return ResponseJSON(424, {'details': errorInfo})
             else:
-                return response.json(0, {'appBundleId': app_info.appBundleId,
+                return ResponseJSON(0, {'appBundleId': app_info.appBundleId,
                                         'appName': app_info.appName,
                                         'newAppversion': app_info.newAppversion,
                                         'systemLanguage': app_info.systemLanguage,
@@ -80,9 +82,9 @@ class AppInfo(View):
                                         'id': app_info.id,
                                         'bundleVersion': app_info.bundleVersion})
         else:
-            return response.json(444,'app_type,appBundleId')
+            return ResponseJSON(444)
 
-    def add(self, request_dict, userID,response):
+    def add(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=40)
         if own_perm is True:
             appBundleId = request_dict.get('appBundleId', None)
@@ -101,10 +103,10 @@ class AppInfo(View):
                 except Exception:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': errorInfo})
+                    return ResponseJSON(424, {'details': errorInfo})
                 else:
                     if has_app_info.exists():
-                        return response.json(60)
+                        return ResponseJSON(60)
                     else:
                         try:
                             app_Info = App_Info(
@@ -121,11 +123,11 @@ class AppInfo(View):
                         except Exception:
                             errorInfo = traceback.format_exc()
                             print(errorInfo)
-                            return response.json(500, {'details': errorInfo})
+                            return ResponseJSON(500, {'details': errorInfo})
                         else:
                             app_Info.save()
                             if app_Info.id:
-                                return response.json(0,
+                                return ResponseJSON(0,
                                                     {
                                                         'appBundleId': app_Info.appBundleId,
                                                         'appName': app_Info.appName,
@@ -138,31 +140,32 @@ class AppInfo(View):
                                                         'bundleVersion': app_Info.bundleVersion
                                                     })
                             else:
-                                return response.json(500)
-            return response.json(444)
+                                return ResponseJSON(500)
+            return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def query(self, request_dict, userID,response):
+    def query(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             page = int(request_dict.get('page', None))
             line = int(request_dict.get('line', None))
-            if page is not None and line is not None:
+            param_flag = CommonService.get_param_flag(data=[page, line])
+            if param_flag is True:
                 queryset = App_Info.objects.all()
                 if queryset.exists():
                     count = queryset.count()
                     res = queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     send_json['count'] = count
-                    return response.json(0, send_json)
-                return response.json(0)
+                    return ResponseJSON(0, send_json)
+                return ResponseJSON(0)
             else:
-                return response.json(444,'page,line')
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def update(self, request_dict, userID, response):
+    def update(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             id = request_dict.get('id', None)
@@ -182,7 +185,7 @@ class AppInfo(View):
                 except Exception:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': errorInfo})
+                    return ResponseJSON(424, {'details': errorInfo})
                 else:
                     if app_info.id:
                         app_info.appBundleId = appBundleId
@@ -194,27 +197,28 @@ class AppInfo(View):
                         app_info.bundleVersion = bundleVersion
                         app_info.downloadLink = downloadLink
                         app_info.save()
-                        return response.json(0, {'update_id': app_info.id, 'update_time': str(app_info.update_time)})
+                        return ResponseJSON(0, {'update_id': app_info.id, 'update_time': str(app_info.update_time)})
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def delete(self, request_dict, userID,response):
+    def delete(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=10)
         if own_perm is True:
             id_list = request_dict.getlist('id', None)
-            if id_list :
+            param_flag = CommonService.get_param_flag(data=[id_list])
+            if param_flag is True:
                 try:
                     for id in id_list:
                         App_Info.objects.filter(id=id).delete()
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(444,'id must list')
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)

+ 85 - 40
Controller/CheckUserData.py

@@ -4,21 +4,18 @@ from random import Random # 用于生成随机码
 from wsgiref.util import FileWrapper
 from django.utils.timezone import utc
 from django.views.decorators.csrf import csrf_exempt
-from django.views.generic import TemplateView
+from django.views.generic import TemplateView, View
 from django.utils.decorators import method_decorator
 from django.contrib.auth.hashers import make_password
+from django.shortcuts import HttpResponseRedirect
 from itsdangerous import URLSafeTimedSerializer as utsr # itsdangerous序列化
 import re, base64, json, traceback, random, string
 from qcloudsms_py.httpclient import HTTPError
 from qcloudsms_py import SmsSingleSender
 from qcloudsms_py import SmsVoiceVerifyCodeSender, SmsVoicePromptSender
-from Model.models import Auth_Captcha,Device_User
-from Ansjer.settings import BASE_DIR
-from Object.ResponseObject import ResponseObject
-import datetime,os
-from Ansjer.config import TX_PHONE_APP_KEY,TX_PHONE_APP_ID
-from django.http import HttpResponse
-
+from Ansjer.settings import *
+from Model.models import Email_Captcha, Device_User, Auth_Captcha
+from Service.ResponseService import *
 
 #生成随机字符串
 def RandomStr(randomlength = 8, number = False):
@@ -37,6 +34,22 @@ def RandomStr(randomlength = 8, number = False):
 
     return str
 
+def Active_User(request, token):
+    tokenConfirm = TokenLink(SECRET_KEY)
+    try:
+        username = tokenConfirm.confirm_validate_token(token)
+    except:
+        return ResponseJSON(1000)
+    try:
+        UserValid = Device_User.objects.get(userName=username)
+    except Device_User.DoesNotExist:
+        return ResponseJSON(113)
+    UserValid = Device_User.objects.get(username=username)
+    UserValid.is_active = True
+    UserValid.user_isValid = True
+    UserValid.save()
+    return ResponseJSON(0)
+
 class MobiletoResetPwdView(TemplateView):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -60,12 +73,11 @@ class MobiletoResetPwdView(TemplateView):
         return self.ValidationError(userName, newPwd, authCode)
 
     def ValidationError(self, userName, newPwd, authCode):
-        response = ResponseObject()
         if userName != None and authCode != None and newPwd != None:
-            return self.MobiletoResetPwd(userName, authCode, newPwd, response)
+            return self.MobiletoResetPwd(userName, authCode, newPwd)
         else:
-            return response.json(800)
-    def MobiletoResetPwd(self, userName, authCode, newPwd,response):
+            return ResponseJSON(800)
+    def MobiletoResetPwd(self, userName, authCode, newPwd):
         UserValid = Device_User.objects.filter(username = userName).order_by('-data_joined')
         if UserValid:
             Users = Auth_Captcha.objects.filter(username = userName).order_by('-sendtime')
@@ -79,17 +91,35 @@ class MobiletoResetPwdView(TemplateView):
                         if timeValid < 300:
                             is_flag = UserValid.update(password=make_password(newPwd))
                             if is_flag:
-                                return (0)
+                                return ResponseJSON(0)
                             else:
-                                return response.json(405)
+                                return ResponseJSON(405)
                         else:
-                            return response.json(120)
+                            return ResponseJSON(120)
         else:
-            return response.json(102)
+            return ResponseJSON(102)
 
 def date_handler(obj):
-    return obj.isoformat()
+    return  obj.isoformat()
+
+class ActiveUserView(View):
+    """账户激活的View"""
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(ActiveUserView, self).dispatch(*args, **kwargs)
+
+    def get(self, request, active_code):
+        # 用code在数据库中过滤处信息
+        all_records = Email_Captcha.objects.filter(userCaptcha = active_code)
+        if all_records:
+            for record in all_records:
+                # 通过邮箱查找到对应的用户
+                userEmail = record.userEmail
+                user = Device_User.objects.get(userEmail = userEmail)
+                Device_User.objects.filter(userEmail = userEmail).update(user_isValid=True, is_active = True)
 
+        response = HttpResponseRedirect('/login/')
+        return response
 
 class TokenLink:
     '''
@@ -153,11 +183,10 @@ class ModifyPwdView(TemplateView):
         return self.ValidationError(userEmail, oldPwd, newPwd)
 
     def ValidationError(self, userEmail, oldPwd, newPwd):
-        response = ResponseObject()
         dataValid = DataValid()
         if dataValid.password_validate(newPwd):
             if oldPwd != newPwd:
-                return response.json(118)
+                return ResponseJSON(118)
             try:
                 User = Device_User.objects.get(userEmail = userEmail)
                 User.userPwd = make_password(newPwd)
@@ -165,12 +194,11 @@ class ModifyPwdView(TemplateView):
             except Exception as e:
                 errorInfo = traceback.format_exc()
                 print('更新密码到数据库: %s' % errorInfo)
-                return response.json(501,{'msg':repr(e)})
+                return ResponseJSON(501,{'msg':repr(e)})
             else:
-                return response.json(0)
+                return ResponseJSON(0)
         else:
-            return response.json(109)
-
+            return ResponseJSON(109)
 
 class DataValid:
 
@@ -210,12 +238,11 @@ class DataValid:
             return False
 
 def sms(phoneNumbers, sendModel, msg, sendType = 'register', template_id = 7839):
-    appid = TX_PHONE_APP_ID
-    appkey = TX_PHONE_APP_KEY
+    appid = SDK_AppID
+    appkey = App_Key
 
     print(phoneNumbers, msg, sendModel, template_id)
     ssender = SmsSingleSender(appid, appkey)
-    response = ResponseObject()
     try:
         if sendType == 'register':
             result = ssender.send(0, "86", phoneNumbers, u"{authCode}为您的注册验证码,请于2分钟内填写。"
@@ -226,12 +253,12 @@ def sms(phoneNumbers, sendModel, msg, sendType = 'register', template_id = 7839)
     except HTTPError as e:
         errorInfo = traceback.format_exc()
         print('发送手机验证码出现网络错误: %s' % errorInfo)
-        return response.json(1022,{'msg':repr(e)})
+        return ResponseFormal(1022,{'msg':repr(e)})
 
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('发送手机短信验证码错误: %s' % errorInfo)
-        return response.json(1021)
+        return ResponseFormal(1021)
     else:
         resultCode = result.get('result', None)
         if resultCode == 0:
@@ -243,14 +270,13 @@ def sms(phoneNumbers, sendModel, msg, sendType = 'register', template_id = 7839)
 
 class QCloudSms(object):
     def __init__(self, nationcode, msg, template_id):
-        self.appid = TX_PHONE_APP_ID
-        self.appkey = TX_PHONE_APP_KEY
+        self.appid = SDK_AppID
+        self.appkey = App_Key
         self.msg = msg # 验证码msg
         self.nationcode = nationcode # 国家码
         self.template_id = template_id # 模板ID
 
     def sms(self, mobiles, model, type = 'register'):
-        response = ResponseObject()
         ssender = SmsSingleSender(self.appid, self.appkey)
         try:
             if type == 'register':
@@ -262,11 +288,11 @@ class QCloudSms(object):
         except HTTPError as e:
             errorInfo = traceback.format_exc()
             print('发送手机短信验证码出现网络错误: %s' % errorInfo)
-            return response.json(1022,repr(e))
+            return ResponseFormal(1022,repr(e))
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('发送手机验证码错误: %s' % errorInfo)
-            return response.formal(1021,repr(e))
+            return ResponseFormal(1021,repr(e))
         else:
             resultCode = result.get('result', None)
             if resultCode == 0:
@@ -278,7 +304,6 @@ class QCloudSms(object):
 
     def voice(self, mobiles, model, type = 'register'):
         # 语音验证码请求
-        response = ResponseObject()
         vvcsender = SmsVoiceVerifyCodeSender(appid = self.appid, appkey = self.appkey)
         try:
             result = vvcsender.send(nation_code=self.nationcode, phone_number = \
@@ -286,11 +311,11 @@ class QCloudSms(object):
         except HTTPError as e:
             errorInfo = traceback.format_exc()
             print('发送手机验证码出现网络错误: %s' % errorInfo)
-            return response.formal(1022,repr(e))
+            return ResponseFormal(1022,repr(e))
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('发送手机语音验证码错误: %s' % errorInfo)
-            return response.formal(1023,repr(e))
+            return ResponseFormal(1023,repr(e))
         else:
             resultCode = result.get('result', None)
             if resultCode == 0:
@@ -323,6 +348,25 @@ class QCloudSms(object):
                 errorJSON = json.dumps(result, ensure_ascii=False)
                 return errorJSON
 
+def upload_file(request):
+    """
+    文件接收
+    :param request: 请求
+    :return:
+    """
+    if request.method == "POST":    # 请求方法为POST时,进行处理
+        upFile =request.FILES.get("upfile", None)    # 获取上传的文件,如果没有文件,则默认为None
+        if not upFile:
+            return HttpResponse("no files for upload!")
+
+        else:
+            upgradePath = os.path.join(MEDIA_URL, '/Upgrade/IPC/')
+            destination = open(os.path.join(upgradePath, upFile.name), 'wb+')    # 打开特定的文件进行二进制的写操作
+            for chunk in upFile.chunks():      # 分块写入文件
+                destination.write(chunk)
+            destination.close()
+            return HttpResponse("upload over!")
+
 @csrf_exempt
 def download_file(request, Upgradename, *callback_args, **callback_kwargs):
     """
@@ -340,13 +384,14 @@ def download_file(request, Upgradename, *callback_args, **callback_kwargs):
     # 打印dict类型的不定长参数 args
     for key in callback_kwargs:
         print("dictargs:" + key + ":" + bytes(callback_kwargs[key]))
+    #received_json_data = json.loads(request.body)
     print(request.body)
     file_name = os.path.join(BASE_DIR, "static/Upgrade/DVR/").replace('\\', '/') + Upgradename
-    response = ResponseObject()
+
     if os.path.isfile(file_name):
         try:
             print(file_name)
-            JSON = response.formal(0)
+            JSON = ResponseFormal(0)
             wrapper = FileWrapper(open(file_name, 'rb'))
             response = HttpResponse(wrapper, content_type="application/octet-stream")
             response['Content-Length'] = os.path.getsize(file_name)
@@ -354,12 +399,12 @@ def download_file(request, Upgradename, *callback_args, **callback_kwargs):
             response['Content-Error'] = JSON
             return response
         except Exception as e:
-            errorJSON = response.formal(10,'Wrong reason:' + repr(e))
+            errorJSON = ResponseFormal(10,'Wrong reason:' + repr(e))
             response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
             response['Content-Error'] = errorJSON
             return response
     else:
-        errorJSON = response.formal(907)
+        errorJSON = ResponseFormal(907)
         response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
         response['Content-Error'] = errorJSON
         return response

+ 23 - 23
Controller/DeviceLog.py

@@ -12,18 +12,13 @@
 @Contact: chanjunkai@163.com
 """
 import datetime
-
-import simplejson as json
 from django.views.decorators.csrf import csrf_exempt
-
 from Model.models import Device_Info
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
 from Object.mongodb import mongodb
-from Service.CommonService import CommonService
-from Service.DeviceOperation import DeviceOperation
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
-
+from Service.DeviceOperation import DeviceOperation
+from Service.ResponseService import *
 '''
 curl http://192.168.136.45:8077/devices/C2887N9EBS87ZAT1111A/logs -d "deviceData={\"UID\":\"C2887N9EBS87ZAT1111A\",\"type\":\"0x10014\",\"UserIP\":\"127.0.0.1\",\"time\":1529474865,\"name\":\"admin\"}"
 http://192.168.136.40:8077/devices/2N1K3LE78TYJ38CE111A/logs?type=All&starttime=1529462169&endtime=1529462169
@@ -33,7 +28,6 @@ http://192.168.136.40:8077/devices/2N1K3LE78TYJ38CE111A/logs?type=All&starttime=
 @csrf_exempt
 def DeviceLog(request, uid):
     # 存储设备日志
-    response = ResponseObject()
     if request.method == 'POST':
         request.encoding = 'utf-8'
         deviceData = request.POST.get('deviceData', None)
@@ -44,13 +38,14 @@ def DeviceLog(request, uid):
                 mdb = mongodb()
                 data['et'] = datetime.datetime.utcnow()
                 col = "log_device_operation"
-                mdb.insert_one(col=col, data=data)
-                return response.json(0)
+                id = mdb.insert_one(col=col, data=data)
+                return ResponseJSON(0)
+                # qs = mdb.findAll(col=col, page=1, line=10)
             except Exception as e:
                 print(repr(e))
-                return response.json(48,repr(e))
+                return ResponseJSON(48,repr(e))
         else:
-            return response.json(13)
+            return ResponseJSON(13)
     # 查找设备日志
     if request.method == 'GET':
         request.encoding = 'utf-8'
@@ -62,11 +57,10 @@ def DeviceLog(request, uid):
         starttime = request.GET.get('starttime', None)
         endtime = request.GET.get('endtime', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 if page is None and line is None:
                     page = 1
                     line = 10000
@@ -85,6 +79,8 @@ def DeviceLog(request, uid):
                             except Exception as e:
                                 if type is not None:
                                     query['type'] = type
+                        # if starttime is not None and endtime is not None and starttime != '' and endtime != '':
+                        #     query['time'] = {'$gte': int(starttime), '$lte': int(endtime)}
                         if starttime is not None and starttime != '' and endtime is not None and endtime != '':
                             query['time'] = {'$gte': int(starttime), '$lte': int(endtime)}
                         elif starttime is not None and starttime != '':
@@ -96,6 +92,10 @@ def DeviceLog(request, uid):
                         print('___________query____________')
                         mdb = mongodb()
                         col = "log_device_operation"
+                        # if int(page) < 0:
+                        #     count = mdb.cout(col=col,query=query)
+                        #     total = math.ceil(count/int(line))
+                        #     page = int(total)+int(page)+1
                         qs = mdb.findAll(col=col, page=int(page), line=int(line), query=query)
                         if qs is not False:
                             data_list = []
@@ -103,11 +103,11 @@ def DeviceLog(request, uid):
                                 i['type'] = DeviceOperation.getOperation(type=i['type'])
                                 data_list.append(i)
                             qs['data'] = data_list
-                        return response.json(0,qs)
+                        return ResponseJSON(0,qs)
                 else:
-                    return response.json(404)
-                return response.json(444)
+                    return ResponseJSON(404)
+                return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)

+ 43 - 44
Controller/DeviceManage.py

@@ -11,11 +11,12 @@
 @file: DeviceManage.py
 @Contact: chanjunkai@163.com
 """
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
+from django.shortcuts import HttpResponse
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.ResponseService import *
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Model.models import Device_Info
@@ -45,41 +46,40 @@ class DeviceManage(View):
 
     def validation(self, request_dict, *args, **kwargs):
         operation = request_dict.get('operation', None)
-        response = ResponseObject()
         if operation is not None:
             token = request_dict.get('token', None)
             if token is not None:
-                tko = TokenObject(token)
-                tko.valid()
-                response.lang = tko.lang
-                if tko.code == 0:
-                    userID = tko.userID()
+                tokenManager = JSONTokenManager()
+                error_code = tokenManager.verify_AToken(token)
+                if error_code == 0:
+                    userID = tokenManager.accessDict.get('userID', None)
                     if userID is not None:
                         if operation == 'query':
-                            return self.query(request_dict, userID, response)
+                            return self.query(request_dict=request_dict, userID=userID)
                         elif operation == 'findByUser':
-                            return self.findByUser(request_dict, userID,response)
+                            return self.findByUser(request_dict=request_dict, userID=userID)
                         elif operation == 'delete':
-                            return self.delete(request_dict, userID, response)
-                    return response.json(444,'operation')
+                            return self.delete(request_dict=request_dict, userID=userID)
+                    return ResponseJSON(444)
                 else:
-                    return response.json(tko.code)
+                    return HttpResponse(tokenManager.errorCodeInfo(error_code))
             else:
-                return response.json(311)
+                return ResponseJSON(311)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def query(self, request_dict, userID, response):
+    def query(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             page = int(request_dict.get('page', None))
             line = int(request_dict.get('line', None))
-            if page is not None and line is not None:
+            param_flag = CommonService.get_param_flag(data=[page, line])
+            if param_flag is True:
                 queryset = Device_Info.objects.all()
                 if queryset.exists():
                     count = queryset.count()
                     res = queryset[(page - 1) * line:page * line]
-                    send_dict = CommonService.qs_to_dict(res)
+                    send_dict = CommonService.query_set_to_dict(res)
                     for k, v in enumerate(send_dict["datas"]):
                         for val in res:
                             if v['pk'] == val.id:
@@ -94,33 +94,34 @@ class DeviceManage(View):
                                 primary= ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
                                 send_dict["datas"][k]['fields']['primaryusername']=primary
                     send_dict['count'] = count
-                    return response.json(0, send_dict)
-                return response.json(0,{'count':0})
+                    return ResponseJSON(0, send_dict)
+                return ResponseJSON(0,{'count':0})
             else:
-                return response.json(444,'page,line')
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def delete(self, request_dict, userID, response):
+    def delete(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=10)
         if own_perm is True:
             id_list = request_dict.getlist('id', None)
-            if id_list:
+            param_flag = CommonService.get_param_flag(data=[id_list])
+            if param_flag is True:
                 try:
                     for id in id_list:
                         Device_Info.objects.filter(id=id).delete()
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(444,'id must list')
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def findByUser(self, request_dict, userID, response):
+    def findByUser(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             page = int(request_dict.get('page', None))
@@ -134,7 +135,7 @@ class DeviceManage(View):
                 if queryset.exists():
                     count = queryset.count()
                     res = queryset[(page - 1) * line:page * line]
-                    send_dict = CommonService.qs_to_dict(res)
+                    send_dict = CommonService.query_set_to_dict(res)
                     for k, v in enumerate(send_dict["datas"]):
                         for val in res:
                             if v['pk'] == val.id:
@@ -147,12 +148,12 @@ class DeviceManage(View):
                                 primary= ModelService.get_user_name(send_dict["datas"][k]['fields']['primaryUserID'])
                                 send_dict["datas"][k]['fields']['primaryusername']=primary
                     send_dict['count'] = count
-                    return response.json(0, send_dict)
-                return response.json(0,{'count':0})
+                    return ResponseJSON(0, send_dict)
+                return ResponseJSON(0,{'count':0})
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
 
 @csrf_exempt
@@ -161,17 +162,15 @@ def Devices(request, UID):
     if request.method == 'GET':
         request.encoding = 'utf-8'
         token = request.GET.get('token', None)
-        response = ResponseObject()
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 res = Device_Info.objects.filter(userID_id=userID,UID=UID)
-                send_dict = CommonService.qs_to_dict(res)
-                return response.json(0, send_dict)
+                send_dict = CommonService.query_set_to_dict(res)
+                return ResponseJSON(0, send_dict)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)

+ 67 - 66
Controller/DeviceMeal.py

@@ -14,13 +14,13 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Model.models import Device_Meal, Store_Meal
 import traceback, datetime
 from django.utils import timezone
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
+from Service.ResponseService import *
 
 '''
 http://192.168.136.40:8077/device/meal?operation=add&token=test&uid=UKPAH63V23U4ZHEB111A&channel=1&rank=2&days=1
@@ -49,43 +49,42 @@ class DeviceMeal(View):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
         operation = request_dict.get('operation', None)
         if operation is not None:
             token = request_dict.get('token', None)
             if token is not None:
-                tko = TokenObject(token)
-                tko.valid()
-                response.lang = tko.lang
-                if tko.code == 0:
-                    userID = tko.userID()
-                    if userID is not None:
+                tokenManager = JSONTokenManager()
+                error_code = tokenManager.verify_AToken(token)
+                if error_code == 0:
+                    userID = tokenManager.accessDict.get('userID', None)
+                    param_flag = CommonService.get_param_flag(data=[userID])
+                    if param_flag is True:
                         if operation == 'query':
-                            return self.query(request_dict, userID, response)
+                            return self.query(request_dict=request_dict, userID=userID)
                         elif operation == 'add':
-                            return self.add(request_dict, userID, response)
+                            return self.add(request_dict=request_dict, userID=userID)
                         elif operation == 'update':
-                            return self.update(request_dict, userID, response)
+                            return self.update(request_dict=request_dict, userID=userID)
                         elif operation == 'delete':
-                            return self.delete(request_dict, userID, response)
+                            return self.delete(request_dict=request_dict, userID=userID)
                         # 用户付费成功调用
                         elif operation == 'addbyuser':
-                            return self.addbyuser(request_dict, userID, response)
+                            return self.addbyuser(request_dict=request_dict, userID=userID)
                         elif operation == 'querybyuser':
-                            return self.querybyuser(request_dict, userID, response)
+                            return self.querybyuser(request_dict=request_dict, userID=userID)
                         elif operation == 'updatebyuser':
-                            return self.updatebyuser(request_dict, userID, response)
+                            return self.updatebyuser(request_dict=request_dict, userID=userID)
                         elif operation == 'updatestatusbyuser':
-                            return self.updatestatusbyuser(request_dict, userID, response)
-                    return response.json(444, 'userID,operation')
+                            return self.updatestatusbyuser(request_dict=request_dict, userID=userID)
+                    return ResponseJSON(444)
                 else:
-                    return response.json(tko.code)
+                    return HttpResponse(tokenManager.errorCodeInfo(error_code))
             else:
-                return response.json(311)
+                return ResponseJSON(311)
         else:
-            return response.json(444, 'operation')
+            return ResponseJSON(444)
 
-    def add(self, request_dict, userID,response):
+    def add(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=40)
         if own_perm is True:
             uid = request_dict.get('uid', None)
@@ -95,7 +94,7 @@ class DeviceMeal(View):
             if param_flag is True:
                 is_exist = Device_Meal.objects.filter(uid=uid, channel=channel)
                 if is_exist.exists():
-                    return response.json(54)
+                    return ResponseJSON(54)
                 else:
                     try:
                         store_meal = Store_Meal.objects.get(id=rank)
@@ -111,10 +110,10 @@ class DeviceMeal(View):
                         )
                         device_meal.save()
                     except Exception as e:
-                        return response.json(500, {'details': repr(e)})
+                        return ResponseJSON(500, {'details': repr(e)})
                     else:
                         if device_meal.id:
-                            return response.json(0, {'id': device_meal.id,
+                            return ResponseJSON(0, {'id': device_meal.id,
                                                     'status': device_meal.status,
                                                     'uid': device_meal.uid,
                                                     'rank': rank,
@@ -122,11 +121,11 @@ class DeviceMeal(View):
                                                     'add_time': str(device_meal.add_time),
                                                     'update_time': str(device_meal.update_time),
                                                     'end_time': str(device_meal.end_time)})
-            return response.json(444)
+            return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def query(self, request_dict, userID,response):
+    def query(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             page = int(request_dict.get('page', None))
@@ -137,21 +136,21 @@ class DeviceMeal(View):
                 if queryset.exists():
                     count = queryset.count()
                     res = queryset[(page - 1) * line:page * line]
-                    send_dict = CommonService.qs_to_dict(res)
+                    send_dict = CommonService.query_set_to_dict(res)
                     for k, v in enumerate(send_dict["datas"]):
                         for val in res:
                             if v['pk'] == val.id:
                                 title = Store_Meal.objects.get(id=v['fields']['rank']).title
                                 send_dict["datas"][k]['fields']['title'] = title
                     send_dict['count'] = count
-                    return response.json(0, send_dict)
-                return response.json(0)
+                    return ResponseJSON(0, send_dict)
+                return ResponseJSON(0)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def update(self, request_dict, userID,response):
+    def update(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             id = request_dict.get('id', None)
@@ -159,6 +158,7 @@ class DeviceMeal(View):
             uid = request_dict.get('uid', None)
             channel = request_dict.get('channel', None)
             rank = request_dict.get('rank', None)
+            # days = request_dict.get('days', None)
             param_flag = CommonService.get_param_flag(data=[status, uid, channel, rank, id])
             if param_flag is True:
                 try:
@@ -173,7 +173,7 @@ class DeviceMeal(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
                     if device_meal.id:
                         device_meal.status = status
@@ -182,15 +182,15 @@ class DeviceMeal(View):
                         device_meal.end_time = end_time
                         device_meal.rank = store_meal
                         device_meal.save()
-                        return response.json(0, {'update_id': device_meal.id,
+                        return ResponseJSON(0, {'update_id': device_meal.id,
                                                 'update_time': str(now_time),
                                                 'end_time': str(end_time)})
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def delete(self, request_dict, userID,response):
+    def delete(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=10)
         if own_perm is True:
             id_list = request_dict.getlist('id', None)
@@ -202,15 +202,15 @@ class DeviceMeal(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def addbyuser(self, request_dict, userID, response):
+    def addbyuser(self, request_dict, userID):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         rank = request_dict.get('rank', None)
@@ -220,7 +220,7 @@ class DeviceMeal(View):
             if own_dev is True:
                 is_exist = Device_Meal.objects.filter(uid=uid, channel=channel)
                 if is_exist.exists():
-                    return response.json(54)
+                    return ResponseJSON(54)
                 else:
                     try:
                         store_meal = Store_Meal.objects.get(id=rank)
@@ -236,10 +236,10 @@ class DeviceMeal(View):
                         )
                         device_meal.save()
                     except Exception as e:
-                        return response.json(500, {'details': repr(e)})
+                        return ResponseJSON(500, {'details': repr(e)})
                     else:
                         if device_meal.id:
-                            return response.json(0,
+                            return ResponseJSON(0,
                                                 {
                                                     'id': device_meal.id,
                                                     'status': device_meal.status,
@@ -251,11 +251,11 @@ class DeviceMeal(View):
                                                     'end_time': str(device_meal.end_time),
                                                 })
             else:
-                return response.json(14)
-        return response.json(444)
+                return ResponseJSON(14)
+        return ResponseJSON(444)
 
     # 查询设备是否开通
-    def querybyuser(self, request_dict, userID,response):
+    def querybyuser(self, request_dict, userID):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         param_flag = CommonService.get_param_flag(data=[uid, channel])
@@ -264,20 +264,20 @@ class DeviceMeal(View):
             if own_dev is True:
                 queryset = Device_Meal.objects.filter(uid=uid, channel=channel)
                 if queryset.exists():
-                    send_dict = CommonService.qs_to_dict(queryset)
+                    send_dict = CommonService.query_set_to_dict(queryset)
                     for k, v in enumerate(send_dict["datas"]):
                         for val in queryset:
                             if v['pk'] == val.id:
                                 title = Store_Meal.objects.get(id=v['fields']['rank']).title
                                 send_dict["datas"][k]['fields']['title'] = title
-                    return response.json(0, send_dict)
-                return response.json(0)
+                    return ResponseJSON(0, send_dict)
+                return ResponseJSON(0)
             else:
-                return response.json(14)
+                return ResponseJSON(14)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def updatebyuser(self, request_dict, userID,response):
+    def updatebyuser(self, request_dict, userID):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         rank = request_dict.get('rank', None)
@@ -297,7 +297,7 @@ class DeviceMeal(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
                     if device_meal.id:
                         device_meal.uid = uid
@@ -305,19 +305,20 @@ class DeviceMeal(View):
                         device_meal.end_time = end_time
                         device_meal.rank = store_meal
                         device_meal.save()
-                        return response.json(0, {'update_id': device_meal.id,
+                        return ResponseJSON(0, {'update_id': device_meal.id,
                                                 'update_time': str(now_time),
                                                 'end_time': str(end_time)})
             else:
-                return response.json(14)
+                return ResponseJSON(14)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def updatestatusbyuser(self, request_dict, userID,response):
+    def updatestatusbyuser(self, request_dict, userID):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         status = request_dict.get('status', None)
-        if uid is not None and channel is not None:
+        param_flag = CommonService.get_param_flag(data=[uid, channel, id])
+        if param_flag is True:
             own_dev = ModelService.check_own_device(userID=userID, UID=uid)
             if own_dev is True:
                 try:
@@ -325,15 +326,15 @@ class DeviceMeal(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
                     if device_meal.id:
                         device_meal.status = status
                         device_meal.save()
                         now_time = timezone.localtime(timezone.now())
-                        return response.json(0, {'update_id': device_meal.id,
+                        return ResponseJSON(0, {'update_id': device_meal.id,
                                                 'update_time': str(now_time)})
             else:
-                return response.json(14)
+                return ResponseJSON(14)
         else:
-            return response.json(444)
+            return ResponseJSON(444)

+ 69 - 71
Controller/EquipmentInfo.py

@@ -1,16 +1,18 @@
+from django.shortcuts import HttpResponse
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Model.models import Equipment_Info, Device_Info
 import traceback
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
+from Service.ResponseService import ResponseJSON
+
 '''
 http://192.168.136.45:8077/equipment/info?token=test&devUid=2N1K3LE78TYJ38CE111A&Channel=0&eventType=1&eventTime=1234567890&operation=add&alarm=21342134&receiveTime=1234567891234567
 http://192.168.136.45:8077/equipment/info?token=test&operation=query&page=1&line=10
-http://192.168.136.45:8077/equipment/info?token=test&operation=delete&devUid=UKPAH63V23U4ZHEB111A&id=5&id=6&id=7
+http://192.168.136.45:8077/equipment/info?token=test&operation      =delete&devUid=UKPAH63V23U4ZHEB111A&id=5&id=6&id=7
 http://192.168.136.40:8077/equipment/info?token=test&operation=update&devUid=UKPAH63V23U4ZHEB111A&id=3&id=4
 http://192.168.136.45:8077/equipment/info?token=test&operation=queryByAdmin&page=1&line=10&userID_id=151547867345163613800138001
 http://192.168.136.45:8077/equipment/info?token=test&operation=deleteByAdmin&id=5&id=6&id=7
@@ -33,38 +35,35 @@ class EquipmentInfo(View):
 
     def validation(self, request_dict, *args, **kwargs):
         token = request_dict.get('token', None)
-        response = ResponseObject()
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            from var_dump import var_dump
-            var_dump(tko.lang)
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 operation = request_dict.get('operation', None)
-                if userID is not None and operation is not None:
+                param_flag = CommonService.get_param_flag(data=[userID, operation])
+                if param_flag is True:
                     if operation == 'query':
-                        return self.query_info(request_dict, userID, response)
+                        return self.query_info(request_dict=request_dict, userID=userID)
                     elif operation == 'add':
-                        return self.add_info(request_dict, userID, response)
+                        return self.add_info(request_dict=request_dict, userID=userID)
                     elif operation == 'update':
-                        return self.update_info(request_dict, userID, response)
+                        return self.update_info(request_dict=request_dict, userID=userID)
                     elif operation == 'delete':
-                        return self.delete_info(request_dict, userID, response)
+                        return self.delete_info(request_dict=request_dict, userID=userID)
                     elif operation == 'findByTime':
-                        return self.findByTime_info(request_dict, userID, response)
+                        return self.findByTime_info(request_dict=request_dict, userID=userID)
                     if operation == 'queryByAdmin':
-                        return self.query_all_info(request_dict, userID, response)
+                        return self.query_all_info(request_dict=request_dict, userID=userID)
                     if operation == 'deleteByAdmin':
-                        return self.delete_by_admin(request_dict, userID, response)
-                return response.json(444,'operation')
+                        return self.delete_by_admin(request_dict=request_dict, userID=userID)
+                return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def add_info(self, request_dict, userID,response):
+    def add_info(self, request_dict, userID):
         devUid = request_dict.get('devUid', None)
         Channel = request_dict.get('Channel', None)
         eventType = request_dict.get('eventType', None)
@@ -80,12 +79,11 @@ class EquipmentInfo(View):
                 except Exception:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, errorInfo)
+                    return ResponseJSON(424, errorInfo)
                 else:
                     if device_info.exists():
                         try:
                             equipment_info = Equipment_Info(
-                                userID=userID,
                                 devUid=devUid,
                                 Channel=Channel,
                                 eventType=eventType,
@@ -100,10 +98,10 @@ class EquipmentInfo(View):
                         except Exception:
                             errorInfo = traceback.format_exc()
                             print(errorInfo)
-                            return response.json(500, errorInfo)
+                            return ResponseJSON(500, errorInfo)
                         else:
                             if equipment_info.id:
-                                return response.json(0, {'infoID': equipment_info.id,
+                                return ResponseJSON(0, {'infoID': equipment_info.id,
                                                         'devUid': devUid,
                                                         'Channel': Channel,
                                                         'alarm': alarm,
@@ -114,36 +112,36 @@ class EquipmentInfo(View):
                                                         'devNickName': equipment_info.devNickName,
                                                         'viewAccont': equipment_info.viewAccont})
                             else:
-                                return response.json(500)
+                                return ResponseJSON(500)
                     else:
-                        return response.json(14)
+                        return ResponseJSON(14)
             else:
-                return response.json(14)
-        return response.json(444)
+                return ResponseJSON(14)
+        return ResponseJSON(444)
 
-    def query_info(self, request_dict, userID,response):
+    def query_info(self, request_dict, userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         param_flag = CommonService.get_param_flag(data=[page, line])
         if param_flag is True:
-            equipment_info_queryset = Equipment_Info.objects.filter(userID_id=userID)
-            if equipment_info_queryset.exists():
-                equipment_info_count = equipment_info_queryset.count()
-                equipment_info_res = equipment_info_queryset[(page - 1) * line:page * line]
-                send_json = CommonService.query_set_to_dict(equipment_info_res)
-                send_json['count'] = equipment_info_count
-                return response.json(0, send_json)
-            else:
+            try:
                 uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
-                devNickName_list = Device_Info.objects.filter(userID_id=userID).values_list('NickName', flat=True)
-                if len(uid_list) and len(devNickName_list):
-                    Equipment_Info.objects.filter(devUid__in=uid_list, devNickName__in=devNickName_list).update(
-                        userID=userID)
-                return response.json(0, {'datas': [], 'count': 0})
+            except Exception:
+                pass
+            if len(uid_list):
+                equipment_info_queryset = Equipment_Info.objects.filter(devUid__in=uid_list).order_by(
+                    '-id')
+                if equipment_info_queryset.exists():
+                    equipment_info_count = equipment_info_queryset.count()
+                    equipment_info_res = equipment_info_queryset[(page - 1) * line:page * line]
+                    send_json = CommonService.query_set_to_dict(equipment_info_res)
+                    send_json['count'] = equipment_info_count
+                    return ResponseJSON(0, send_json)
+            return ResponseJSON(0, {'datas': [], 'count': 0})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def update_info(self, request_dict, userID, response):
+    def update_info(self, request_dict, userID):
         id_list = request_dict.getlist('id[]', None)
         if id_list is None or len(id_list) < 1:
             id_list = request_dict.getlist('id', None)
@@ -157,11 +155,11 @@ class EquipmentInfo(View):
                     if own_dev is True:
                         count += 1
                         eq.update(status=1)
-            return response.json(0,{'update_success': count})
+            return ResponseJSON(0,{'update_success': count})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def delete_info(self, request_dict, userID, response):
+    def delete_info(self, request_dict, userID):
         id_list = request_dict.getlist('id[]', None)
         if id_list is None or len(id_list) < 1:
             id_list = request_dict.getlist('id', None)
@@ -177,13 +175,13 @@ class EquipmentInfo(View):
             except Exception as e:
                 errorInfo = traceback.format_exc()
                 print(errorInfo)
-                return response.json(424,repr(e))
+                return ResponseJSON(424,repr(e))
             else:
-                return response.json(0)
+                return ResponseJSON(0)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def findByTime_info(self, request_dict, userID,response):
+    def findByTime_info(self, request_dict, userID):
         startTime = request_dict.get('startTime')
         endTime = request_dict.get('endTime')
         page = int(request_dict.get('page', None))
@@ -192,20 +190,20 @@ class EquipmentInfo(View):
         if param_flag is True:
             uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
             if len(uid_list):
-                equipment_info_queryset = Equipment_Info.objects.filter(userID_id=userID,
+                equipment_info_queryset = Equipment_Info.objects.filter(devUid__in=uid_list,
                                                                         eventTime__range=(startTime, endTime)).order_by(
                     '-id')
                 if equipment_info_queryset.exists():
                     equipment_info_count = equipment_info_queryset.count()
                     equipment_info_res = equipment_info_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(equipment_info_res)
+                    send_json = CommonService.query_set_to_dict(equipment_info_res)
                     send_json['count'] = equipment_info_count
-                    return response.json(0,send_json)
-            return response.json(0,{'datas': [], 'count': 0})
+                    return ResponseJSON(0,send_json)
+            return ResponseJSON(0,{'datas': [], 'count': 0})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def query_all_info(self, request_dict, userID,response):
+    def query_all_info(self, request_dict, userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         userID_id = request_dict.get('userID_id', None)
@@ -215,21 +213,21 @@ class EquipmentInfo(View):
             if check_perm is True:
                 uid_list = Device_Info.objects.filter(userID_id=userID_id).values_list('UID', flat=True)
                 if len(uid_list):
-                    equipment_info_queryset = Equipment_Info.objects.filter(userID_id=userID_id).order_by(
+                    equipment_info_queryset = Equipment_Info.objects.filter(devUid__in=uid_list).order_by(
                         '-id')
                     if equipment_info_queryset.exists():
                         equipment_info_count = equipment_info_queryset.count()
                         equipment_info_res = equipment_info_queryset[(page - 1) * line:page * line]
-                        send_json = CommonService.qs_to_dict(equipment_info_res)
+                        send_json = CommonService.query_set_to_dict(equipment_info_res)
                         send_json['count'] = equipment_info_count
-                        return response.json(0,send_json)
-                return response.json(0,{'datas': [], 'count': 0})
+                        return ResponseJSON(0,send_json)
+                return ResponseJSON(0,{'datas': [], 'count': 0})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def delete_by_admin(self, request_dict, userID,response):
+    def delete_by_admin(self, request_dict, userID):
         id_list = request_dict.getlist('id', None)
         param_flag = CommonService.get_param_flag(data=[id_list])
         if param_flag is True:
@@ -240,10 +238,10 @@ class EquipmentInfo(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424,{'details': repr(e)})
+                    return ResponseJSON(424,{'details': repr(e)})
                 else:
-                    return response.json(0,{'delete_count': is_delete[0]})
+                    return ResponseJSON(0,{'delete_count': is_delete[0]})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)

+ 211 - 170
Controller/EquipmentManager.py

@@ -1,136 +1,155 @@
 from django.views.decorators.csrf import csrf_exempt
 from django.core import serializers
 import traceback
+from Service.ResponseService import *
 from Service.ModelService import ModelService
 from Model.models import Device_User, Device_Info
+from Service.TokenManager import JSONTokenManager
 from Service.CommonService import CommonService
-import simplejson as json
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
 
 
-def addNewUserEquipment(userID, deviceContent, response):
-    userIDValid = Device_User.objects.filter(userID=userID)
+def queryUserEquipment(userID):
+    try:
+        deviceValid = Device_Info.objects.filter(userID_id = userID)
+    except Exception as e:
+        errorInfo = traceback.format_exc()
+        print('查询数据库错误: %s' % errorInfo)
+        return ResponseFormal(500, repr(e))
+    else:
+        if deviceValid:
+            sqlJSON = serializers.serialize('json', Device_Info.objects.filter(userID_id = userID))
+            sqlList = json.loads(sqlJSON)
+            sqlDict = dict(zip(["datas"], [sqlList]))
+            return ResponseFormal(0,sqlDict)
+        else:
+            UserValid = Device_User.objects.filter(userID=userID)
+            if UserValid:
+                return ResponseFormal(172)
+            else:
+                return ResponseFormal(113)
+
+def addNewUserEquipment(userID, deviceContent, bulk = False):
+    userIDValid = Device_User.objects.filter(userID = userID)
     if userIDValid:
         try:
             try:
                 deviceData = json.loads(deviceContent)
             except Exception as e:
-                return response.json(803, repr(e))
+                return ResponseFormal(803,repr(e))
             else:
                 UID = deviceData.get('UID', None)
                 if UID != None:
-                    is_bind = Device_Info.objects.filter(UID=UID, isShare=False)
-                    if is_bind:
-                        return response.json(175)
-                    dValid = Device_Info.objects.filter(userID=userID, UID=UID)
+                    #is_bind = Device_Info.objects.filter(UID = UID,isShare=False)
+                    #if is_bind:
+                        #return ResponseFormal(175)
+                    dValid = Device_Info.objects.filter(userID = userID, UID = UID)
                     if dValid:
-                        return response.json(174)
+                        return ResponseFormal(174)
                     else:
                         if 'NickName' in deviceData:
                             nValid = Device_Info.objects.filter(userID=userID, NickName=deviceData['NickName'])
                             if nValid.exists():
-                                return response.json(179)
-                        userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
-                                                 **deviceData)
+                                return ResponseJSON(179)
+                        userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID, **deviceData)
                         userDevice.save()
                 else:
-                    return response.json(806)
+                    return ResponseFormal(806)
 
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('添加设备错误: %s ' % errorInfo)
-            return response.json(178, repr(e))
+            return ResponseFormal(178,repr(e))
         else:
             sqlJSON = serializers.serialize('json', [userDevice])
             sqlList = json.loads(sqlJSON)
-            sqlDict = dict(zip(["datas"], [sqlList]))
-            return response.json(0, sqlDict)
+            sqlDict =dict(zip(["datas"], [sqlList]))
+            return ResponseFormal(0,sqlDict)
     else:
-        return response.json(113)
+        return ResponseFormal(113)
 
 
-def delUserEquipment(userID, id, response):
+def delUserEquipment(userID, id):
     try:
-        deviceValid = Device_Info.objects.filter(userID_id=userID, id=id)
+        deviceValid = Device_Info.objects.filter(userID_id = userID, id = id)
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('查询数据库错误: %s' % errorInfo)
-        return response.json(500, repr(e))
+        return ResponseFormal(500, repr(e))
     else:
         if deviceValid:
             try:
-                Device_Info.objects.filter(userID_id=userID, id=id).delete()
+                Device_Info.objects.filter(userID_id = userID, id = id).delete()
             except Exception as e:
                 errorInfo = traceback.format_exc()
                 print('删除数据库记录错误: %s' % errorInfo)
-                return response.json(176, repr(e))
+                return ResponseFormal(176,repr(e))
             else:
-                return response.json(0)
+                return ResponseFormal(0)
         else:
-            UserValid = Device_User.objects.filter(userID=userID)
-            if UserValid.exists():
-                return response.json(172)
+            UserValid = Device_User.objects.filter(userID = userID)
+            if UserValid:
+                return ResponseFormal(172)
             else:
-                return response.json(113)
+                return ResponseFormal(113)
 
-
-def modifyUserEquipment(userID, deviceContent, id, response):
+def modifyUserEquipment(userID, deviceContent, id):
     try:
-        deviceValid = Device_Info.objects.filter(userID_id=userID, id=id)
+        deviceValid = Device_Info.objects.filter(userID_id = userID, id = id)
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('查询数据库错误: %s' % errorInfo)
-        return response.json(500, repr(e))
+        return ResponseFormal(500, repr(e))
     else:
         if deviceValid:
             deviceData = json.loads(deviceContent)
             try:
-                userDevice = Device_Info.objects.filter(userID_id=userID, id=id).update(**deviceData)
+                userDevice = Device_Info.objects.filter(userID_id = userID, id = id).update(**deviceData)
             except Exception as e:
                 errorInfo = traceback.format_exc()
                 print('修改设备信息错误: %s ' % errorInfo)
-                return response.json(177, repr(e))
+                return ResponseFormal(177,repr(e))
             else:
-                qs = Device_Info.objects.filter(userID_id=userID, id=id)
-                res = CommonService.qs_to_dict(qs)
-                return response.json(0, res)
+                sqlJSON = serializers.serialize('json', Device_Info.objects.filter(userID_id = userID, id = id))
+                sqlList = json.loads(sqlJSON)
+                sqlDict = dict(zip(["datas"], [sqlList]))
+                return ResponseFormal(0,sqlDict)
         else:
             UserValid = Device_User.objects.filter(userID=userID)
-            if UserValid.exists():
-                return response.json(172)
+            if UserValid:
+                return ResponseFormal(172)
             else:
-                return response.json(113)
+                return ResponseFormal(113)
 
+def showAllUserEquipment(userID):
 
-def showAllUserEquipment(userID, response):
     try:
-        userValid = Device_User.objects.filter(userID=userID).order_by('-data_joined')
+        userValid = Device_User.objects.filter(userID = userID).order_by('-data_joined')
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('查询数据库错误: %s' % errorInfo)
-        return response.json(500, repr(e))
+        return ResponseFormal(500,repr(e))
 
     else:
-        if userValid.exists():
+        if userValid:
             # own_permission = ModelService.check_permission(userID=userID,permID=30)
             if userValid[0].is_superuser != 100 and userValid[0].is_superuser != 1:
-                return response.json(604)
+                return ResponseFormal(604)
             else:
-                qs = Device_Info.objects.all()
-                res = CommonService.qs_to_dict(qs)
-                return response.json(0, res)
+                sqlJSON = serializers.serialize('json', Device_Info.objects.all())#.order_by('-data_joined'))
+                sqlList = json.loads(sqlJSON)
+                print(sqlList, sqlJSON)
+                sqlDict = dict(zip(["datas"], [sqlList]))
+                return ResponseFormal(0,sqlDict)
         else:
-            return response.json(113)
-
+            return ResponseFormal(113)
 
-def showAllUserEquipmentPC(userID, fieldDict, response):
+def showAllUserEquipmentPC(userID,fieldDict):
     try:
         user_valid = Device_User.objects.filter(userID=userID).order_by('-data_joined')
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('查询数据库错误: %s' % errorInfo)
-        return response.json(500, repr(e))
+        return ResponseJSON(500,repr(e))
     else:
         if user_valid:
             own_permission = ModelService.check_permission(userID=userID, permID=30)
@@ -140,27 +159,33 @@ def showAllUserEquipmentPC(userID, fieldDict, response):
                 device_info_query_set = Device_Info.objects.all()
                 device_info_count = device_info_query_set.count()
                 device_info_res = device_info_query_set[(page - 1) * line:page * line]
-                sqlDict = CommonService.qs_to_dict(query_set=device_info_res)
+                sqlDict = CommonService.query_set_to_dict(query_set=device_info_res)
                 sqlDict['count'] = device_info_count
-                return response.json(0, sqlDict)
+                return ResponseJSON(0, sqlDict)
             else:
-                return response.json(604)
+                return ResponseJSON(604)
         else:
-            return response.json(113)
+            return ResponseJSON(113)
 
+def getKwargs(data={}):
+    kwargs = {}
+    for (k, v) in data.items():
+        if v is not None and v != u'':
+            kwargs[k+'__icontains'] = v
+    return kwargs
 
-def findEquipmentInfo(content, type, fieldDict):
-    if type == 1:
-        Device_Info_QuerySet = Device_Info.objects.all()
-    if type == 2:
-        searchCondition = content
-        kwargs = CommonService.get_kwargs(data=searchCondition)
-        Device_Info_QuerySet = Device_Info.objects.filter(**kwargs)
+def findEquipmentInfo(content,type,fieldDict):
+    if type ==1:
+        Device_Info_QuerySet=Device_Info.objects.all()
+    if type==2:
+        searchCondition=content
+        kwargs = getKwargs(data=searchCondition)
+        Device_Info_QuerySet=Device_Info.objects.filter(**kwargs)
     page = int(fieldDict['page'])
     line = int(fieldDict['line'])
     device_info_count = Device_Info_QuerySet.count()
     res = Device_Info_QuerySet[(page - 1) * line:page * line]
-    send_dict = CommonService.qs_to_dict(query_set=res)
+    send_dict = CommonService.query_set_to_dict(query_set=res)
     for k, v in enumerate(send_dict["datas"]):
         for val in res:
             if v['pk'] == val.id:
@@ -170,8 +195,6 @@ def findEquipmentInfo(content, type, fieldDict):
                 send_dict["datas"][k]['fields']['primaryusername'] = primary
     send_dict['count'] = device_info_count
     return send_dict
-
-
 @csrf_exempt
 def queryUserEquipmentInterface(request, *callback_args,
                                 **callback_kwargs):
@@ -182,50 +205,56 @@ def queryUserEquipmentInterface(request, *callback_args,
     :param callback_kwargs:
     :return:
     '''
-    response = ResponseObject()
+
     if request.method == 'POST':
         request.encoding = 'utf-8'
         token = request.POST.get('token', None)
+
+        if token is not None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                if userID:
+                    response = HttpResponse(queryUserEquipment(userID))
+                    return response
+                else:
+                    return ResponseJSON(310)
+            else:
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
+        else:
+            return ResponseJSON(800)
+
     elif request.method == 'GET':
         request.encoding = 'gb2312'
         token = request.GET.get('token', None)
-    else:
-        return response.json(801)
-    if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
-            if userID is not None:
-                try:
-                    deviceValid = Device_Info.objects.filter(userID_id=userID)
-                except Exception as e:
-                    errorInfo = traceback.format_exc()
-                    print('查询数据库错误: %s' % errorInfo)
-                    return response.json(500, repr(e))
+
+        if token is not None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                # userID = '151547899913020418607560093'
+
+                if userID:
+                    response = HttpResponse(queryUserEquipment(userID))
+                    return response
                 else:
-                    if deviceValid.exists():
-                        res = CommonService.qs_to_dict(deviceValid)
-                        return response.json(0, res)
-                    else:
-                        UserValid = Device_User.objects.filter(userID=userID)
-                        if UserValid.exists():
-                            return response.json(172)
-                        else:
-                            return response.json(113)
+                    return ResponseJSON(310)
+
             else:
-                return response.json(310)
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
         else:
-            return response.json(tko.code)
-    else:
-        return response.json(800)
+            return ResponseJSON(800)
 
+    else:
+        return ResponseJSON(801)
 
 @csrf_exempt
 def addNewUserEquipmentInterface(request, *callback_args,
                                  **callback_kwargs):
-    response = ResponseObject()
     if request.method == 'POST':
         request.encoding = 'utf-8'
         request_dict = request.POST
@@ -233,28 +262,29 @@ def addNewUserEquipmentInterface(request, *callback_args,
         request.encoding = 'utf-8'
         request_dict = request.GET
     else:
-        return response.json(801)
+        return ResponseJSON(801)
     token = request_dict.get('token', None)
     deviceContent = request_dict.get('content', None)
     if token is not None and deviceContent is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
-            if userID is not None:
-                return addNewUserEquipment(userID, deviceContent, response)
+        tM = JSONTokenManager()
+        error_code = tM.verify_AToken(token)
+        if error_code == 0:
+            userID = tM.accessDict.get('userID', None)
+            if userID:
+                response = HttpResponse(addNewUserEquipment(userID, deviceContent))
+                return response
             else:
-                return response.json(310)
+                return ResponseJSON(310)
         else:
-            return response.json(tko.code)
+            response = HttpResponse(tM.errorCodeInfo(error_code))
+            return response
     else:
-        return response.json(444, 'token,content')
+        return ResponseJSON(800)
 
 
 @csrf_exempt
 def delUserEquipmentInterface(request, *callback_args,
-                              **callback_kwargs):
+                                 **callback_kwargs):
     '''
     删除用户设备
     :param request:
@@ -262,32 +292,51 @@ def delUserEquipmentInterface(request, *callback_args,
     :param callback_kwargs: 表示关键字参数,dict类型
     :return:
     '''
-    response = ResponseObject()
     if request.method == 'POST':
         request.encoding = 'utf-8'
-        request_dict = request.POST
+
+        token = request.POST.get('token', None)
+        id = request.POST.get('id', None)
+
+        if token is not None and id is not None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                if userID:
+                    response = HttpResponse(delUserEquipment(userID, id))
+                    return response
+                else:
+                    return ResponseJSON(310)
+            else:
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
+
+        else:
+            return ResponseJSON(800)
+
     elif request.method == 'GET':
         request.encoding = 'gb2312'
-        request_dict = request.GET
-    else:
-        return response.json(801)
-    token = request_dict.get('token', None)
-    id = request_dict.get('id', None)
-    if token is not None and id is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
-            if userID is not None:
-                return delUserEquipment(userID, id, response)
+        token = request.GET.get('token', None)
+        id = request.GET.get('id', None)
+
+        if token is not None and id is not None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                if userID:
+                    response = HttpResponse(delUserEquipment(userID, id))
+                    return response
+                else:
+                    return ResponseJSON(310)
             else:
-                return response.json(310)
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
         else:
-            return response.json(tko.code)
+            return ResponseJSON(800)
     else:
-        return response.json(800)
-
+        return ResponseJSON(801)
 
 @csrf_exempt
 def modifyUserEquipmentInterface(request, *callback_args,
@@ -299,7 +348,6 @@ def modifyUserEquipmentInterface(request, *callback_args,
     :param callback_kwargs:
     :return:
     '''
-    response = ResponseObject()
     if request.method == 'POST':
         request.encoding = 'utf-8'
         request_dict = request.POST
@@ -310,20 +358,20 @@ def modifyUserEquipmentInterface(request, *callback_args,
     deviceContent = request_dict.get('content', None)
     id = request_dict.get('id', None)
     if token is not None and deviceContent is not None and id is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
-            if userID is not None:
-                return modifyUserEquipment(userID, deviceContent, id, response)
+        tM = JSONTokenManager()
+        error_code = tM.verify_AToken(token)
+        if error_code == 0:
+            userID = tM.accessDict.get('userID', None)
+            if userID:
+                response = HttpResponse(modifyUserEquipment(userID, deviceContent, id))
+                return response
             else:
-                return response.json(310)
+                return ResponseJSON(310)
         else:
-            return response.json(tko.code)
+            response = HttpResponse(tM.errorCodeInfo(error_code))
+            return response
     else:
-        return response.json(444, 'token,content,id')
-
+        return ResponseJSON(444)
 
 @csrf_exempt
 def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs):
@@ -335,55 +383,48 @@ def showAllUserEquipmentInterface(request, *callback_args, **callback_kwargs):
         fieldDict = request.GET
     token = request.POST.get('token', None)
     type = request.POST.get('type', None)
-    response = ResponseObject()
     if token != None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
+        tM = JSONTokenManager()
+        error_code = tM.verify_AToken(token)
+        if error_code == 0:
+            userID = tM.accessDict.get('userID', None)
             if userID:
                 if type == 'PC':
-                    return showAllUserEquipmentPC(userID, fieldDict, response)
+                    return showAllUserEquipmentPC(userID, fieldDict)
                 else:
-                    return showAllUserEquipment(userID, response)
+                    return showAllUserEquipment(userID)
             else:
-                return response.json(310)
+                return ResponseJSON(310)
         else:
-            return response.json(tko.code)
-    else:
-        return response.json(800)
+            return HttpResponse(tM.errorCodeInfo(error_code))
 
+    else:
+        return ResponseJSON(800)
 
 @csrf_exempt
 def findEquipmentInfoInterface(request, *callback_args, **callback_kwargs):
     if request.method == 'GET':
         request.encoding = 'gb2312'
+        token = request.GET.get('token',None)
         fieldDict = request.GET
+        deviceContent = request.GET.get('content',None)
     if request.method == 'POST':
         request.encoding = 'utf-8'
+        token = request.POST.get('token', None)
         fieldDict = request.POST
-    deviceContent = fieldDict.get('content', None)
-    token = fieldDict.get('token', None)
-    response = ResponseObject()
+        deviceContent = request.POST.get('content', None)
 
     if token != None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
+        tM = JSONTokenManager()
+        error_code = tM.verify_AToken(token)
+        if error_code == 0:
             if deviceContent:
-                try:
-                    deviceContent = json.loads(deviceContent)
-                except Exception as e:
-                    print(repr(e))
-                    return response.json(10,repr(e))
-                else:
-                    resultDict = findEquipmentInfo(content=deviceContent, type=2, fieldDict=fieldDict)
+                deviceContent=json.loads(deviceContent)
+                resultDict=findEquipmentInfo(content=deviceContent,type=2,fieldDict=fieldDict)
             else:
-                resultDict = findEquipmentInfo(content='', type=1, fieldDict=fieldDict)
-            return response.json(0, resultDict)
+                resultDict=findEquipmentInfo(content='',type=1,fieldDict=fieldDict)
+            return ResponseJSON(0,resultDict)
         else:
-            return response.json(tko.code)
+            return ResponseJSON(310)
     else:
-        return response.json(444,'token')
+        return ResponseJSON(800)

+ 50 - 55
Controller/EquipmentOTA.py

@@ -1,15 +1,14 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Model.models import Equipment_Version
+from Ansjer.config import *
 from django.utils import timezone
-import os,simplejson as json
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Ansjer.settings import BASE_DIR
-
+import os
+from Service.ResponseService import *
 '''
 http://192.168.136.45:8077/equipment/OTA?token=test&operation=query&page=1&line=10
 http://192.168.136.45:8077/equipment/OTA?token=test&operation=find&page=1&line=10&content={}
@@ -17,7 +16,6 @@ http://192.168.136.40:8077/equipment/OTA?eid=138001524641441203480138000&token=t
 http://192.168.136.40:8077/equipment/OTA?eid=138001524641441203480138000&token=test&operation=update&status=1
 '''
 
-
 class EquipmentOTA(View):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -33,59 +31,56 @@ class EquipmentOTA(View):
 
     def validation(self, request_dict, *args, **kwargs):
         token = request_dict.get('token', None)
-        response = ResponseObject()
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                if userID is not None:
-                    operation = request_dict.get('operation', None)
-                    if operation is not None:
-                        if operation == 'delete':
-                            return self.delete(request_dict, userID, response)
-                        elif operation == 'query':
-                            return self.query(request_dict, userID, response)
-                        elif operation == 'find':
-                            return self.find(request_dict, userID, response)
-                        elif operation == 'update':
-                            return self.update(request_dict, userID, response)
-                    return response.json(444, 'operation')
-                else:
-                    return response.json(310)
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
+                operation = request_dict.get('operation', None)
+                param_flag = CommonService.get_param_flag(data=[userID, operation])
+                if param_flag is True:
+                    if operation == 'delete':
+                        return self.delete(request_dict=request_dict, userID=userID)
+                    elif operation == 'query':
+                        return self.query(request_dict=request_dict, userID=userID)
+                    elif operation == 'find':
+                        return self.find(request_dict=request_dict, userID=userID)
+                    elif operation == 'update':
+                        return self.update(request_dict=request_dict, userID=userID)
+
+                return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def delete(self, request_dict, userID,response):
+    def delete(self, request_dict, userID):
         eid = request_dict.get('eid', None)
         param_flag = CommonService.get_param_flag(data=[eid])
         if param_flag is True:
-            own_permission = ModelService.check_permission(userID=userID, permID=230)
+            own_permission = ModelService.check_permission(userID=userID,permID=230)
             if own_permission is True:
                 ev = Equipment_Version.objects.filter(eid=eid)
                 if ev.exists():
                     try:
-                        has_ev = Equipment_Version.objects.filter(filePath=ev[0].filePath)
+                        has_ev = EquipmentOTA.objects.filter(filePath = ev[0].filePath)
                         if has_ev.exists():
                             pass
                         else:
-                            filepath = os.path.join(BASE_DIR, ev[0].filePath)
+                            filepath = os.path.join(BASE_DIR,ev[0].filePath)
                             os.remove(filepath)
                     except Exception as e:
                         pass
                     ev.delete()
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(404)
-        return response.json(444)
+                return ResponseJSON(404)
+        return ResponseJSON(444)
 
-    def query(self, request_dict, userID,response):
+    def query(self, request_dict,userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
-        param_flag = CommonService.get_param_flag(data=[page, line])
+        param_flag = CommonService.get_param_flag(data=[page,line])
         if param_flag is True:
             own_permission = ModelService.check_permission(userID=userID, permID=240)
             if own_permission is True:
@@ -93,20 +88,20 @@ class EquipmentOTA(View):
                 if equipment_version_queryset.exists():
                     count = equipment_version_queryset.count()
                     res = equipment_version_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     send_json['count'] = count
-                    return response.json(0, send_json)
-                return response.json(0)
+                    return ResponseJSON(0, send_json)
+                return ResponseJSON(0)
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def find(self, request_dict, userID,response):
+    def find(self, request_dict,userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         content = request_dict.get('content', None)
-        param_flag = CommonService.get_param_flag(data=[page, line, content])
+        param_flag = CommonService.get_param_flag(data=[page,line,content])
         if param_flag is True:
             own_permission = ModelService.check_permission(userID=userID, permID=250)
             if own_permission is True:
@@ -116,17 +111,17 @@ class EquipmentOTA(View):
                 if equipment_version_queryset.exists():
                     count = equipment_version_queryset.count()
                     res = equipment_version_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     send_json['count'] = count
-                    return response.json(0, send_json)
+                    return ResponseJSON(0, send_json)
                 else:
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def update(self, request_dict, userID,response):
+    def update(self,request_dict,userID):
         eid = request_dict.get('eid', None)
         param_flag = CommonService.get_param_flag(data=[eid])
         if param_flag is True:
@@ -134,15 +129,15 @@ class EquipmentOTA(View):
             if own_permission is True:
                 ev = Equipment_Version.objects.filter(eid=eid)
                 if ev.exists():
-                    status = request_dict.get('status', None)
+                    status = request_dict.get('status',None)
                     try:
                         update_time = timezone.localtime(timezone.now())
-                        ev.update(status=status, update_time=update_time)
+                        ev.update(status=status,update_time=update_time)
                     except Exception as e:
                         print(repr(e))
                         pass
-                    return response.json(0, {'update_time': str(update_time)})
+                    return ResponseJSON(0,{'update_time':str(update_time)})
             else:
-                return response.json(404)
-        return response.json(444)
+                return ResponseJSON(404)
+        return ResponseJSON(444)
 

+ 50 - 55
Controller/EquipmentSensor.py

@@ -1,12 +1,13 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.ResponseService import *
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Model.models import Device_Info, Equipment_Sensor
 import traceback
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
+
 '''
 增加,关联设备传感器:
 params:{
@@ -63,35 +64,29 @@ class EquipmentSensor(View):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                if userID is not None:
-                    operation = request_dict.get('operation', None)
-                    if operation == 'add':
-                        return self.add_sensor(request_dict, userID,response)
-                    elif operation == 'delete':
-                        return self.delete_sensor(request_dict, userID,response)
-                    elif operation == 'update':
-                        return self.update_sensor(request_dict, userID,response)
-                    elif operation == 'query':
-                        return self.query_sensor(request_dict, userID,response)
-                    elif operation == 'queryall':
-                        return self.admin_query_all_sensor(request_dict, userID,response)
-                else:
-                    return response.json(310)
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
+                operation = request_dict.get('operation', None)
+                if operation == 'add':
+                    return self.add_sensor(request_dict=request_dict, userID=userID)
+                elif operation == 'delete':
+                    return self.delete_sensor(request_dict=request_dict, userID=userID)
+                elif operation == 'update':
+                    return self.update_sensor(userID=userID, request_dict=request_dict)
+                elif operation == 'query':
+                    return self.query_sensor(userID=userID,request_dict=request_dict)
+                elif operation == 'queryall':
+                    return self.admin_query_all_sensor(userID=userID,request_dict=request_dict)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
-
+            return ResponseJSON(311)
 
-    def add_sensor(self, request_dict,userID,response):
+    def add_sensor(self, userID, request_dict):
         # 设备PK
         did = request_dict.get('did', None)
         name = request_dict.get('name', None)
@@ -105,24 +100,24 @@ class EquipmentSensor(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print('database error: %s' % errorInfo)
-                    return response.json(424)
+                    return ResponseJSON(424)
                 else:
                     if device_info:
                         equipment_sensor = Equipment_Sensor(name=name, status=status, type=type, uid=device_info.UID)
                         equipment_sensor.save()
                         if equipment_sensor.id:
-                            return response.json(0,
+                            return ResponseJSON(0,
                                                                              {'id': equipment_sensor.id,
                                                                                        'status': equipment_sensor.status,
                                                                                        'name': equipment_sensor.name,
                                                                                        'type': equipment_sensor.type})
                         else:
-                            return response.json(4)
+                            return ResponseJSON(4)
             else:
-                return response.json(14)
-        return response.json(444)
+                return ResponseJSON(14)
+        return ResponseJSON(444)
 
-    def delete_sensor(self, request_dict,userID,response):
+    def delete_sensor(self, request_dict,userID):
         # deletelist
         did = request_dict.get('did',None)
         id_list = request_dict.getlist('id', None)
@@ -135,17 +130,17 @@ class EquipmentSensor(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print('database error: %s' % errorInfo)
-                    return response.json(424)
+                    return ResponseJSON(424)
                 else:
                     if device_info:
                         for id in id_list:
                             Equipment_Sensor.objects.filter(id=id, uid=device_info.UID).delete()
-                        return response.json(0)
+                        return ResponseJSON(0)
             else:
-                return response.json(14)
-        return response.json(444)
+                return ResponseJSON(14)
+        return ResponseJSON(444)
 
-    def update_sensor(self,request_dict,userID,response):
+    def update_sensor(self,request_dict,userID):
         id = request_dict.get('id', None)
         did = request_dict.get('did',None)
         status = request_dict.get('status', None)
@@ -159,21 +154,21 @@ class EquipmentSensor(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print('database error: %s' % errorInfo)
-                    return response.json(424)
+                    return ResponseJSON(424)
                 else:
                     is_update = Equipment_Sensor.objects.filter(id=id, uid=device_info.UID).update(status=status,
                                                                                                   name=name)
                     if is_update:
-                        return response.json(0, {'id': id, 'status': status,
+                        return ResponseJSON(0, {'id': id, 'status': status,
                                                                                            'name': name})
-                return response.json(4)
+                return ResponseJSON(4)
             else:
-                return response.json(14)
+                return ResponseJSON(14)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
 
-    def query_sensor(self,request_dict,userID,response):
+    def query_sensor(self,request_dict,userID):
         did = request_dict.get('did', None)
         if did is not None:
             is_user = ModelService.check_user_own_device(userID=userID, deviceID=did)
@@ -184,19 +179,19 @@ class EquipmentSensor(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print('database error: %s' % errorInfo)
-                    return response.json(424)
+                    return ResponseJSON(424)
                 else:
                     equipment_sensor_queryset = Equipment_Sensor.objects.filter(uid=device_info.UID)
                     if equipment_sensor_queryset.exists():
-                        send_json = CommonService.qs_to_dict(equipment_sensor_queryset)
-                        return response.json(0, send_json)
+                        send_json = CommonService.query_set_to_dict(equipment_sensor_queryset)
+                        return ResponseJSON(0, send_json)
                     else:
-                        return response.json(0, {})
-            return response.json(14)
+                        return ResponseJSON(0, {})
+            return ResponseJSON(14)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def admin_query_all_sensor(self,request_dict,userID,response):
+    def admin_query_all_sensor(self,request_dict,userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         if userID is not None:
@@ -206,13 +201,13 @@ class EquipmentSensor(View):
                 if equipment_sensor_queryset.exists():
                     equipment_stream_count = equipment_sensor_queryset.count()
                     equipment_stream_res = equipment_sensor_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(equipment_stream_res)
+                    send_json = CommonService.query_set_to_dict(equipment_stream_res)
                     send_json['count'] = equipment_stream_count
-                    return response.json(0, send_json)
+                    return ResponseJSON(0, send_json)
                 else:
-                    return response.json(0, {})
-            return response.json(604)
+                    return ResponseJSON(0, {})
+            return ResponseJSON(604)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
 

+ 11 - 14
Controller/EquipmentStatus.py

@@ -15,8 +15,7 @@ from django.views.decorators.csrf import csrf_exempt
 from Model.models import Device_Info
 from django.utils import timezone
 from Service.CommonService import CommonService
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
+from Service.ResponseService import *
 '''
 http://192.168.136.45:8077/device/online?UID=C2887N9EBS87ZAT1111A
 http://192.168.136.45:8077/device/offline?UID=C2887N9EBS87ZAT1111A
@@ -25,8 +24,7 @@ http://192.168.136.45:8077/device/updateIP?UID=C2887N9EBS87ZAT1111A?ip=190.9.194
 
 
 @csrf_exempt
-def EquipmentOnline(request):
-    response = ResponseObject()
+def EquipmentOnline(request, *callback_args, **callback_kwargs):
     if request.method == 'GET':
         request.encoding = 'utf-8'
         UID = request.GET.get('UID', None)
@@ -40,14 +38,13 @@ def EquipmentOnline(request):
             device_info.update(Online=True, update_time=now_time)
         except Exception as e:
             print(repr(e))
-        return response.json(0)
+        return ResponseJSON(0)
     else:
-        return response.json(13)
+        return ResponseJSON(13)
 
 
 @csrf_exempt
-def EquipmentOffline(request):
-    response = ResponseObject()
+def EquipmentOffline(request, *callback_args, **callback_kwargs):
     if request.method == 'GET':
         request.encoding = 'utf-8'
         UID = request.GET.get('UID', None)
@@ -60,14 +57,13 @@ def EquipmentOffline(request):
             device_info.update(Online=False)
         except Exception as e:
             print(repr(e))
-        return response.json(0)
+        return ResponseJSON(0)
     else:
-        return response.json(13)
+        return ResponseJSON(13)
 
 
 @csrf_exempt
-def updateIP(request):
-    response = ResponseObject()
+def updateIP(request, *callback_args, **callback_kwargs):
     if request.method == 'GET':
         request.encoding = 'utf-8'
         UID = request.GET.get('UID', None)
@@ -80,10 +76,11 @@ def updateIP(request):
     if device_info.exists():
         area = ''
         try:
+            # area = MiscellService.getArea(ip)
             area = CommonService.getAddr(ip=ip)
             device_info.update(ip=ip, area=area)
         except Exception as e:
             print(repr(e))
-        return response.json(0,{'area': area})
+        return ResponseJSON(0,{'area': area})
     else:
-        return response.json(13)
+        return ResponseJSON(13)

+ 49 - 54
Controller/FeedBackInfo.py

@@ -1,13 +1,12 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Model.models import Feedback_Info
 from django.utils import timezone
 import traceback
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.CommonService import CommonService
+from Service.ResponseService import *
 '''
 http://192.168.136.45:8077/feedbackInfo?operation=add&token=test&content=12341234
 http://192.168.136.45:8077/feedbackInfo?operation=query&token=test&page=1&line=10
@@ -35,40 +34,36 @@ class FeedBackInfo(View):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 operation = request_dict.get('operation', None)
-                if userID is not None:
+                param_flag = CommonService.get_param_flag(data=[userID, operation])
+                if param_flag is True:
                     if operation == 'query':
-                        return self.query_info(request_dict, userID,response)
+                        return self.query_info(request_dict=request_dict, userID=userID)
                     elif operation == 'add':
-                        return self.add_info(request_dict, userID,response)
+                        return self.add_info(request_dict=request_dict, userID=userID)
                     elif operation == 'update':
-                        return self.update_info(request_dict, userID,response)
+                        return self.update_info(request_dict=request_dict,userID=userID)
                     elif operation == 'delete':
-                        return self.delete_info(request_dict, userID,response)
+                        return self.delete_info(request_dict=request_dict, userID=userID)
                     elif operation == 'queryAll':
-                        return self.query_all_info(request_dict, userID,response)
+                        return self.query_all_info(request_dict=request_dict,userID=userID)
                     elif operation == 'deleteByAdmin':
-                        return self.delete_by_admin(request_dict, userID,response)
+                        return self.delete_by_admin(request_dict=request_dict,userID=userID)
                     elif operation == 'updateByAdmin':
-                        return self.update_by_admin(request_dict, userID,response)
-                    else:
-                        return response.json(444,'444')
-                else:
-                    return response.json(310)
+                        return self.update_by_admin(request_dict=request_dict,userID=userID)
+                return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def add_info(self, request_dict, userID,response):
+    def add_info(self, request_dict, userID):
         content = request_dict.get('content', None)
         param_flag = CommonService.get_param_flag(data=[content])
         if param_flag is True:
@@ -81,13 +76,13 @@ class FeedBackInfo(View):
             except Exception:
                 errorInfo = traceback.format_exc()
                 print(errorInfo)
-                return response.json(424, {'details': errorInfo})
+                return ResponseJSON(424, {'details': errorInfo})
             else:
                 print(type(feedback_info.add_time))
-                return response.json(0,{'id':feedback_info.id})
-        return response.json(444)
+                return ResponseJSON(0,{'id':feedback_info.id})
+        return ResponseJSON(444)
 
-    def query_info(self, request_dict, userID,response):
+    def query_info(self, request_dict, userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         param_flag = CommonService.get_param_flag(data=[page, line])
@@ -96,14 +91,14 @@ class FeedBackInfo(View):
             if feedback_info_queryset.exists():
                 count = feedback_info_queryset.count()
                 res = feedback_info_queryset[(page - 1) * line:page * line]
-                send_json = CommonService.qs_to_dict(res)
+                send_json = CommonService.query_set_to_dict(res)
                 send_json['count'] = count
-                return response.json(0, send_json)
-            return response.json(0, {'datas': [], 'count': 0})
+                return ResponseJSON(0, send_json)
+            return ResponseJSON(0, {'datas': [], 'count': 0})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def update_info(self, request_dict, userID,response):
+    def update_info(self, request_dict, userID):
         content = request_dict.get('content', None)
         id = request_dict.get('id',None)
 
@@ -114,24 +109,24 @@ class FeedBackInfo(View):
                 feedback_info.content = content
                 feedback_info.save()
             except Exception as e:
-                return response.json(302, {'details': repr(e)})
+                return ResponseJSON(302, {'details': repr(e)})
             else:
                 now_time = timezone.localtime(timezone.now())
-                return response.json(0, {'update_success': 1,
+                return ResponseJSON(0, {'update_success': 1,
                                                                                    'update_time': str(now_time)})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def delete_info(self, request_dict, userID,response):
+    def delete_info(self, request_dict, userID):
         id_list = request_dict.getlist('id',None)
         param_flag = CommonService.get_param_flag(data=[id_list])
         if param_flag is True:
             is_delete = Feedback_Info.objects.filter(id__in=id_list, userID=userID).delete()
-            return response.json(0,{'delete_count':is_delete[0]})
+            return ResponseJSON(0,{'delete_count':is_delete[0]})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def query_all_info(self, request_dict, userID,response):
+    def query_all_info(self, request_dict, userID):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         order = request_dict.get('order','-id')
@@ -149,32 +144,32 @@ class FeedBackInfo(View):
                 if feedback_info_queryset.exists():
                     count = feedback_info_queryset.count()
                     res = feedback_info_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     for k, v in enumerate(send_json["datas"]):
                         username = ModelService.get_user_name(userID=send_json["datas"][k]['fields']['userID'])
                         send_json["datas"][k]['fields']['username']=username
                     send_json['count'] = count
-                    return response.json(0, send_json)
-                return response.json(0, {'datas': [], 'count': 0})
+                    return ResponseJSON(0, send_json)
+                return ResponseJSON(0, {'datas': [], 'count': 0})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def delete_by_admin(self, request_dict, userID,response):
+    def delete_by_admin(self, request_dict, userID):
         id_list = request_dict.getlist('id', None)
         param_flag = CommonService.get_param_flag(data=[id_list])
         if param_flag is True:
             check_perm = ModelService.check_permission(userID=userID, permID=10)
             if check_perm is True:
                 is_delete = Feedback_Info.objects.filter(id__in=id_list).delete()
-                return response.json(0, {'delete_count': is_delete[0]})
+                return ResponseJSON(0, {'delete_count': is_delete[0]})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def update_by_admin(self, request_dict, userID,response):
+    def update_by_admin(self, request_dict, userID):
         id = request_dict.get('id',None)
         status = request_dict.get('status',None)
         param_flag = CommonService.get_param_flag(data=[id, status])
@@ -186,11 +181,11 @@ class FeedBackInfo(View):
                     feedback_info.status = status
                     feedback_info.save()
                 except Exception as e:
-                    return response.json(302, {'details': repr(e)})
+                    return ResponseJSON(302, {'details': repr(e)})
                 else:
                     now_time = timezone.localtime(timezone.now())
-                    return response.json(0, {'update_id': feedback_info.id,'update_time':str(now_time)})
+                    return ResponseJSON(0, {'update_id': feedback_info.id,'update_time':str(now_time)})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)

+ 91 - 94
Controller/HlsManage.py

@@ -14,15 +14,14 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Model.models import Device_Meal
 from Object.AWS.S3ClassObject import S3ClassObject
 from Object.AWS.CloudfrontSignUrl import CloudfrontSignUrl
 from Object.encryHlsVodUrl import getSignUrl
 from Object.m3u8generate import PlaylistGenerator
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
-from django.http import HttpResponse
+from Service.ResponseService import *
 '''
 设备端
 http://13.56.215.252:82/HlsManager?operation=signPutObj&key=555666.mp4&uid=L59KVYDAEPHR1T6M111A&channel=0
@@ -48,26 +47,26 @@ class HlsManage(View):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
         operation = request_dict.get('operation', None)
-        if operation == 'signPutObj':
-            return self.sign_put_obj(request_dict,response)
-        elif operation == 'signPostObj':
-            return self.sign_post_obj(request_dict,response)
-        elif operation == 'getHlsVod':
-            return self.get_hls_vod(request_dict,response)
-        elif operation == 'getAllTs':
-            return self.get_all_ts(request_dict,response)
-        elif operation == 'getVodUrl':
-            return self.get_vod_url(request_dict,response)
-        else:
-            return response.json(444, 'operation')
+        if operation is not None:
+            if operation == 'signPutObj':
+                return self.sign_put_obj(request_dict=request_dict)
+            elif operation == 'signPostObj':
+                return self.sign_post_obj(request_dict=request_dict)
+            elif operation == 'getHlsVod':
+                return self.get_hls_vod(request_dict=request_dict)
+            elif operation == 'getAllTs':
+                return self.get_all_ts(request_dict=request_dict)
+            elif operation == 'getVodUrl':
+                return self.get_vod_url(request_dict=request_dict)
+        return ResponseJSON(444)
 
-    def sign_put_obj(self, request_dict,response):
+    def sign_put_obj(self, request_dict):
         key = request_dict.get('key', None)
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
-        if key is not None and uid is not None and channel is not None:
+        param_flag = CommonService.get_param_flag(data=[key, uid, channel])
+        if param_flag is True:
             device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
             if device_meal_queryset.exists():
                 path = uid + '_' + channel + '/' + key
@@ -80,19 +79,20 @@ class HlsManage(View):
                 s3 = S3ClassObject()
                 sign_url = s3.sign_put_object(key=path, bucket_meal=bucket_meal[meal_id])
                 if sign_url is not False:
-                    return (0, {'url': sign_url})
+                    return ResponseJSON(0, {'url': sign_url})
                 else:
-                    return response.json(48)
+                    return ResponseJSON(48)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(444,'key, uid, channel')
+            return ResponseJSON(444)
 
-    def sign_post_obj(self, request_dict,response):
+    def sign_post_obj(self, request_dict):
         key = request_dict.get('key', None)
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
-        if key is not None and uid is not None and channel is not None:
+        param_flag = CommonService.get_param_flag(data=[key, uid, channel])
+        if param_flag is True:
             device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
             if device_meal_queryset.exists():
                 path = uid + '_' + channel + '/' + key
@@ -105,66 +105,62 @@ class HlsManage(View):
                 s3 = S3ClassObject()
                 data = s3.sign_post_object(key=path, bucket_meal=bucket_meal[meal_id])
                 if data is not False:
-                    return response.json(0, {'url': data})
+                    return ResponseJSON(0, {'url': data})
                 else:
-                    return response.json(48)
+                    return ResponseJSON(48)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(444,'key, uid, channel')
+            return ResponseJSON(444)
 
-    def get_all_ts(self, request_dict,response):
+    def get_all_ts(self, request_dict):
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                if userID is not None:
-                    uid = request_dict.get('uid', None)
-                    channel = request_dict.get('channel', None)
-                    if uid is not None and channel is not None:
-                        own_permission = ModelService.check_permission(userID=userID, permID=30)
-                        own_device = ModelService.check_own_device(userID=userID, UID=uid)
-                        if own_permission is True or own_device is True:
-                            device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
-                            if device_meal_queryset.exists():
-                                meal_id = device_meal_queryset[0].rank_id
-                                bucket_meal = {
-                                    1: 'ansjer.meal.1',  # 7
-                                    2: 'ansjer.meal.2',  # 30
-                                }
-                                s3 = S3ClassObject()
-                                data = s3.get_prefix_obj(prefix=uid + '_' + channel + '/', bucket=bucket_meal[meal_id])
-                                # return response.json(0, {'files': data,'bk':bucket_meal[meal_id]})
-                                return response.json(0, {'files': data})
-                            else:
-                                return response.json(444)
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                uid = request_dict.get('uid', None)
+                channel = request_dict.get('channel', None)
+                userID = tokenManager.accessDict.get('userID', None)
+                param_flag = CommonService.get_param_flag(data=[userID, uid, channel])
+                if param_flag is True:
+                    own_permission = ModelService.check_permission(userID=userID, permID=30)
+                    own_device = ModelService.check_own_device(userID=userID, UID=uid)
+                    if own_permission is True or own_device is True:
+                        device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
+                        if device_meal_queryset.exists():
+                            meal_id = device_meal_queryset[0].rank_id
+                            bucket_meal = {
+                                1: 'ansjer.meal.1',  # 7
+                                2: 'ansjer.meal.2',  # 30
+                            }
+                            s3 = S3ClassObject()
+                            data = s3.get_prefix_obj(prefix=uid + '_' + channel + '/', bucket=bucket_meal[meal_id])
+                            # return ResponseJSON(0, {'files': data,'bk':bucket_meal[meal_id]})
+                            return ResponseJSON(0, {'files': data})
                         else:
-                            return response.json(404)
+                            return ResponseJSON(444)
                     else:
-                        return response.json(444,'uid,channel')
+                        return ResponseJSON(404)
                 else:
-                    return response.json(310)
+                    return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def get_hls_vod(self, request_dict,response):
+    def get_hls_vod(self, request_dict):
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                
-                if userID is not None:
-                    key = request_dict.get('key', None)
-                    uid = request_dict.get('uid', None)
-                    channel = request_dict.get('channel', None)
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                key = request_dict.get('key', None)
+                uid = request_dict.get('uid', None)
+                channel = request_dict.get('channel', None)
+                userID = tokenManager.accessDict.get('userID', None)
+                param_flag = CommonService.get_param_flag(data=[userID, key, uid, channel])
+                if param_flag is True:
                     own_device = ModelService.check_own_device(userID=userID, UID=uid)
                     if own_device is True:
                         device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
@@ -172,9 +168,10 @@ class HlsManage(View):
                             meal_id = device_meal_queryset[0].rank_id
                             cf_domain = {
                                 1: 'http://d3om3d8c0l14oc.cloudfront.net/',
-                                2: 'http://d4neaolnu8h83.cloudfront.net/',
+                                2:'http://d4neaolnu8h83.cloudfront.net/',
                             }
-                            url = cf_domain[meal_id] + uid + '_' + channel + '/' + key
+                            url = cf_domain[meal_id]+uid + '_' + channel + '/' + key
+                            # url = 'http://d3om3d8c0l14oc.cloudfront.net/'+uid + '_' + channel + '/' + key
                             sign_url = CloudfrontSignUrl(url=url)
                             playlist_entries = [
                                 {
@@ -183,36 +180,36 @@ class HlsManage(View):
                                 }
                             ]
                             playlist = PlaylistGenerator(playlist_entries).generate()
-                            response = HttpResponse(content_type='application/force-download', content=playlist)
-                            response['Content-Disposition'] = 'attachment; filename=' + key + '.m3u8'
+                            response = HttpResponse(content_type='application/force-download',content=playlist)
+                            response['Content-Disposition'] = 'attachment; filename='+key+'.m3u8'
                             # response['X-Sendfile'] = playlist
-                            # return response.json(404)
+                            # return ResponseJSON(404)
                             return response
                             # return HttpResponse(playlist)
                         else:
-                            return response.json(0)
+                            return ResponseJSON(0)
                     else:
-                        return response.json(15)
+                        return ResponseJSON(15)
                 else:
-                    return response.json(310)
+                    return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
-        
+            return ResponseJSON(311)
+
     # mp4
-    def get_vod_url(self, request_dict,response):
+    def get_vod_url(self, request_dict):
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
                 key = request_dict.get('key', None)
                 uid = request_dict.get('uid', None)
                 channel = request_dict.get('channel', None)
-                if userID is not None:
+                userID = tokenManager.accessDict.get('userID', None)
+                param_flag = CommonService.get_param_flag(data=[userID, key, uid, channel])
+                if param_flag is True:
                     own_device = ModelService.check_own_device(userID=userID, UID=uid)
                     if own_device is True:
                         device_meal_queryset = Device_Meal.objects.filter(uid=uid, channel=channel, status=1)
@@ -225,17 +222,17 @@ class HlsManage(View):
                             bk = bucket_meal[meal_id]
                             path = '/'+bk+'/'+uid+'_'+channel+'/'+key
                             signUrl = getSignUrl(path=path)
-                            return response.json(0,{'signUrl':signUrl})
+                            return ResponseJSON(0,{'signUrl':signUrl})
                         else:
-                            return response.json(0)
+                            return ResponseJSON(0)
                     else:
-                        return response.json(15)
+                        return ResponseJSON(15)
                 else:
-                    return response.json(310)
+                    return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
 
 

+ 26 - 30
Controller/LogAccess.py

@@ -11,12 +11,11 @@
 @file: LogAccess.py
 @Contact: chanjunkai@163.com
 """
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Object.mongodb import mongodb
 from django.views.decorators.csrf import csrf_exempt
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-
+from Service.ResponseService import *
 
 @csrf_exempt
 def LogAccess(request):
@@ -30,35 +29,32 @@ def LogAccess(request):
         starttime = request.GET.get('starttime', None)
         # 结束时间
         endtime = request.GET.get('endtime', None)
-        response = ResponseObject()
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                if userID is not None:
-                    if page is not None and line is not None:
-                        own_per = ModelService.check_permission(userID=userID, permID=30)
-                        if own_per is True:
-                            query = {}
-                            if starttime is not None and starttime != '' and endtime is not None and endtime != '':
-                                query['time'] = {'$gte': int(starttime), '$lte': int(endtime)}
-                            elif starttime is not None and starttime != '':
-                                query['time'] = {'$gte': int(starttime)}
-                            elif endtime is not None and endtime != '':
-                                query['time'] = {'$lte': int(endtime)}
-                            col = "log_access"
-                            mdb = mongodb()
-                            qs = mdb.findAll(col=col, page=int(page), line=int(line), query=query)
-                            return response.json(0, qs)
-                        else:
-                            return response.json(404)
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
+                param_flag = CommonService.get_param_flag(data=[userID, page, line])
+                if param_flag is True:
+                    own_per = ModelService.check_permission(userID=userID, permID=30)
+                    if own_per is True:
+                        query = {}
+                        if starttime is not None and starttime != '' and endtime is not None and endtime != '':
+                            query['time'] = {'$gte': int(starttime),'$lte': int(endtime)}
+                        elif starttime is not None and starttime != '':
+                            query['time'] = {'$gte': int(starttime)}
+                        elif endtime is not None and endtime != '':
+                            query['time'] = {'$lte': int(endtime)}
+                        # var_dump(query)
+                        col = "log_access"
+                        mdb = mongodb()
+                        qs = mdb.findAll(col=col, page=int(page), line=int(line), query=query)
+                        return ResponseJSON(0,qs)
                     else:
-                        return response.json(444,'page,line')
+                        return ResponseJSON(404)
                 else:
-                    return response.json(310)
+                    return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)

+ 83 - 39
Controller/LogManager.py

@@ -4,10 +4,10 @@ from django.views.generic import TemplateView
 from django.utils.decorators import method_decorator
 import Ansjer.settings as api_settings
 from Service.ModelService import ModelService
-import time,os
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Ansjer.settings import BASE_DIR
+import time
+from Service.ResponseService import *
+from Ansjer.config import *
+from Service.TokenManager import JSONTokenManager
 
 
 def StatisticsData(request):
@@ -113,7 +113,6 @@ def StatisticsData(request):
     print('HTTP_USER_AGENT', request.META.get('HTTP_USER_AGENT', 'unknown'))
     print('HTTP_AUTHORIZATION', request.META.get('HTTP_AUTHORIZATION', b'unknown'))
 
-
 class HelpView(TemplateView):
     '''
     帮助说明,包括版本信息,帮助文件等
@@ -134,42 +133,48 @@ class HelpView(TemplateView):
         return self.getRequestInfo(reInfoType,token)
 
     def getRequestInfo(self, reInfoType,token):
-        response = ResponseObject()
         if reInfoType is not None and token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 own_permission = ModelService.check_permission(userID=userID, permID=30)
                 if own_permission is True:
+                    vInfo = versionInfo()
                     if reInfoType == 'version':
-                        return self.readInfo(response)
+                        response = HttpResponse(vInfo.readInfo())
+                        return response
                     elif reInfoType == 'requirements':
-                        return self.requirementsInfo(response)
+                        response = HttpResponse(vInfo.requirementsInfo())
+                        return response
                     elif reInfoType == 'helpfile':
-                        return self.getHelpCHM(response)
+                        response = vInfo.getHelpCHM()
+                        return response
                     else:
-                        return response.json(801)
+                        return ResponseJSON(801)
                 else:
-                    return response.json(404)
+                    return ResponseJSON(404)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(800,'reInfoType','reInfoType')
+            return ResponseJSON(800)
+
+class versionInfo:
+    def __init__(self):
+        return
 
-    def readInfo(self,response):
+    def readInfo(self):
         verfilePath = '/'.join((api_settings.BASE_DIR, 'static/Help/')).replace('\\', '/') + 'version.txt'
         if os.path.isfile(verfilePath):
             file = open(verfilePath, encoding='utf-8')
             versionStr = ''
             for line in file:
                 versionStr += line
-            return response.json(0,{'versioninfo':versionStr})
+            return ResponseFormal(0,{'versioninfo':versionStr})
         else:
-            return response.json(701)
+            return ResponseFormal(701)
 
-    def requirementsInfo(self,response):
+    def requirementsInfo(self):
         requirementsPath = '/'.join((api_settings.BASE_DIR, 'requirements.txt')).replace('\\', '/')
         print(requirementsPath)
         if os.path.isfile(requirementsPath):
@@ -177,28 +182,68 @@ class HelpView(TemplateView):
             requirementsStr = ''
             for line in file:
                 requirementsStr += line
-            return response.json(0,{'requirementsinfo': requirementsStr})
+            return ResponseFormal(0,{'requirementsinfo': requirementsStr})
         else:
-            return response.json(701)
+            return ResponseFormal(701)
 
-    def getHelpCHM(self,response):
+    def getHelpCHM(self):
         verHelpCHM = '/'.join((api_settings.BASE_DIR, 'static/Help/')).replace('\\', '/') + 'AnsjerHelp.CHM'
         print(verHelpCHM)
         if os.path.isfile(verHelpCHM):
             return OTAEquipment.downloadUrl(fileType='CHM', fileCode='', fileVersion='', fileName=verHelpCHM)
         else:
-            return response.json(code=701)
+            return ResponseFormal(code=701)
+
+from django.core.cache import cache
+class ZxMiddleware(object):
+    def __init__(self):
+        self.online_ips = ()
+        self.online_count = 0
+
+    def process_request(self, request):
+        if 'HTTP_X_FORWARDED_FOR' in request.META:
+            ip = request.META['HTTP_X_FORWARDED_FOR']
+        else:
+            ip = request.META['REMOTE_ADDR']
+        online_ips = cache.get("online_ips", [])
+        if online_ips:
+            online_ips = cache.get_many(online_ips).keys()
+        cache.set(ip, 0, 15 * 60)
+        if ip not in online_ips:
+            online_ips.append(ip)
+        cache.set("online_ips", online_ips)
 
+def get_online_count():
+    online_ips = cache.get("online_ips", [])
+    if online_ips:
+        online_ips = cache.get_many(online_ips).keys()
+        return len(online_ips)
+    return 0
 
+class BlockedIpMiddleware3:
+    def __init__(self, get_response):
+        print(get_response, 'dddddddddddddd')
+        self.get_response = get_response
+        # One-time configuration and initialization.
+
+    def __call__(self, request):
+        # Code to be executed for each request before
+        # the view (and later middleware) are called.
+        print('sdcall', request)
+        response = self.get_response(request)
+
+        # Code to be executed for each request/response after
+        # the view is called.
+        return response
+
+@csrf_exempt
 def upload_help_chm(request):
     token = request.POST.get('token', None)
-    response = ResponseObject()
     if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
+        tokenManager = JSONTokenManager()
+        error_code = tokenManager.verify_AToken(token)
+        if error_code == 0:
+            userID = tokenManager.accessDict.get('userID', None)
             own_permission = ModelService.check_permission(userID=userID, permID=30)
             if own_permission is True:
                 f = request.FILES.get('file', None)
@@ -211,16 +256,15 @@ def upload_help_chm(request):
                             destination.write(chunk)
                 except Exception as e:
                     print('error:' + repr(e))
-                    return response.json(700,{'details': repr(e)})
-                return response.json(0)
+                    return ResponseJSON(700,{'details': repr(e)})
+                return ResponseJSON(0)
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(tko.code)
+            return HttpResponse(tokenManager.errorCodeInfo(error_code))
     else:
-        return response.json(311)
+        return ResponseJSON(311)
 
 @csrf_exempt
 def errorPath(request,**kwargs):
-    response = ResponseObject()
-    return response.json(414)
+    return ResponseFormal(414)

+ 65 - 65
Controller/MealManage.py

@@ -11,17 +11,17 @@
 @file: MealManage.py
 @Contact: chanjunkai@163.com
 """
+from django.shortcuts import HttpResponse
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
 from Model.models import Store_Meal
 import traceback
 from django.utils import timezone
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
-
+from Service.ResponseService import ResponseJSON
 '''
 http://192.168.136.40:8077/meal/manage?operation=add&token=test&title=套餐A&price=$199&content=存7天&day=7&id=1
 http://192.168.136.45:8077/meal/manage?operation=update&token=test&id=1&title=套餐A&price=$199&content=存3天&day=7
@@ -44,36 +44,35 @@ class MealManage(View):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
-        token = request_dict.get('token', None)
-        if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                if userID is not None:
-                    operation = request_dict.get('operation', None)
-                    if operation == 'query':
-                        return self.query(request_dict, response)
-                    elif operation == 'add':
-                        return self.add(request_dict, userID, response)
-                    elif operation == 'update':
-                        return self.update(request_dict, userID, response)
-                    elif operation == 'delete':
-                        return self.delete(request_dict, userID, response)
-                    elif operation == 'find':
-                        return self.find(request_dict, userID, response)
-                    else:
-                        return response.json(444, 'operation')
+        operation = request_dict.get('operation', None)
+        if operation is not None:
+            token = request_dict.get('token', None)
+            if token is not None:
+                tokenManager = JSONTokenManager()
+                error_code = tokenManager.verify_AToken(token)
+                if error_code == 0:
+                    userID = tokenManager.accessDict.get('userID', None)
+                    param_flag = CommonService.get_param_flag(data=[userID])
+                    if param_flag is True:
+                        if operation == 'query':
+                            return self.query(request_dict=request_dict)
+                        elif operation == 'add':
+                            return self.add(request_dict=request_dict, userID=userID)
+                        elif operation == 'update':
+                            return self.update(request_dict=request_dict, userID=userID)
+                        elif operation == 'delete':
+                            return self.delete(request_dict=request_dict, userID=userID)
+                        elif operation == 'find':
+                            return self.find(request_dict=request_dict, userID=userID)
+                    return ResponseJSON(444)
                 else:
-                    return response.json(310)
+                    return HttpResponse(tokenManager.errorCodeInfo(error_code))
             else:
-                return response.json(tko.code)
+                return ResponseJSON(311)
         else:
-            return response.json(311)
+            return ResponseJSON(444)
 
-    def add(self, request_dict, userID, response):
+    def add(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=40)
         if own_perm is True:
             title = request_dict.get('title', None)
@@ -85,7 +84,7 @@ class MealManage(View):
             if param_flag is True:
                 try:
                     store_meal = Store_Meal(
-                        id=id,
+                        id = id,
                         title=title,
                         price=price,
                         content=content,
@@ -95,24 +94,25 @@ class MealManage(View):
                 except Exception:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(500, {'details': errorInfo})
+                    return ResponseJSON(500, {'details': errorInfo})
                 else:
                     if store_meal.id:
-                        return response.json(0, {
-                            'id': store_meal.id,
-                            'title': store_meal.title,
-                            'price': store_meal.price,
-                            'content': store_meal.content,
-                            'day': store_meal.day,
-                            'add_time': str(store_meal.add_time),
-                            'update_time': str(store_meal.update_time),
-                        })
+                        return ResponseJSON(0,
+                                                                         {
+                                                                             'id': store_meal.id,
+                                                                             'title': store_meal.title,
+                                                                             'price': store_meal.price,
+                                                                             'content': store_meal.content,
+                                                                             'day': store_meal.day,
+                                                                             'add_time': str(store_meal.add_time),
+                                                                             'update_time': str(store_meal.update_time),
+                                                                         })
 
-            return response.json(444)
+            return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def query(self, request_dict, response):
+    def query(self, request_dict):
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         param_flag = CommonService.get_param_flag(data=[page, line])
@@ -121,14 +121,14 @@ class MealManage(View):
             if queryset.exists():
                 count = queryset.count()
                 res = queryset[(page - 1) * line:page * line]
-                send_json = CommonService.qs_to_dict(res)
+                send_json = CommonService.query_set_to_dict(res)
                 send_json['count'] = count
-                return response.json(0, send_json)
-            return response.json(0)
+                return ResponseJSON(0, send_json)
+            return ResponseJSON(0)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def update(self, request_dict, userID, response):
+    def update(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             id = request_dict.get('id', None)
@@ -138,14 +138,14 @@ class MealManage(View):
             content = request_dict.get('content', None)
 
             param_flag = CommonService.get_param_flag(
-                data=[id, title, price, content, day])
+                data=[id, title, price, content,day])
             if param_flag is True:
                 try:
                     store_meal = Store_Meal.objects.get(id=id)
                 except Exception:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': errorInfo})
+                    return ResponseJSON(424, {'details': errorInfo})
                 else:
                     if store_meal.id:
                         now_time = timezone.localtime(timezone.now())
@@ -155,14 +155,14 @@ class MealManage(View):
                         store_meal.content = content
                         store_meal.day = day
                         store_meal.save()
-                        return response.json(0, {'update_id': store_meal.id,
-                                                 'update_time': str(now_time)})
+                        return ResponseJSON(0, {'update_id': store_meal.id,
+                                                                                           'update_time': str(now_time)})
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def delete(self, request_dict, userID, response):
+    def delete(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=10)
         if own_perm is True:
             id_list = request_dict.getlist('id', None)
@@ -174,15 +174,15 @@ class MealManage(View):
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': repr(e)})
+                    return ResponseJSON(424, {'details': repr(e)})
                 else:
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def find(self, request_dict, userID, response):
+    def find(self, request_dict, userID):
         own_perm = ModelService.check_permission(userID=userID, permID=30)
         if own_perm is True:
             page = int(request_dict.get('page', None))
@@ -193,11 +193,11 @@ class MealManage(View):
                 if queryset.exists():
                     count = queryset.count()
                     res = queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(res)
+                    send_json = CommonService.query_set_to_dict(res)
                     send_json['count'] = count
-                    return response.json(0, send_json)
-                return response.json(0)
+                    return ResponseJSON(0, send_json)
+                return ResponseJSON(0)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)

+ 349 - 247
Controller/OTAEquipment.py

@@ -1,31 +1,46 @@
 from zlib import crc32
+from Ansjer.settings import *
 from django.core import serializers
 from wsgiref.util import FileWrapper
 import traceback, hashlib
-from Ansjer.config import SERVER_DOMAIN
+from Ansjer.settings import SERVER_DOMAIN
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView
 from django.utils.decorators import method_decorator
 from Model.models import Equipment_Version
 from Model.models import Device_User
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Service.CommonService import CommonService
-import time, os,simplejson as json
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from django.http import HttpResponse
-from Ansjer.settings import BASE_DIR
+from Service.ResponseService import *
+import time
+
+def getEquipmentVersion(code):
+    if code == '31162001A':
+        return ResponseFormal(0,{'softwareVersion': '1.4.3'})
+    try:
+        equipmentValid = Equipment_Version.objects.filter(code = code,status=1).order_by('-data_joined')
+    except Exception as e:
+        errorInfo = traceback.format_exc()
+        print('查询数据库错误: %s' % errorInfo)
+        return ResponseFormal(500,{'details':repr(e)})
+    else:
+        if equipmentValid:
+            equipment = equipmentValid[0]
+            return ResponseFormal(0, {'softwareVersion': equipment.softwareVersion})
+        else:
+            return ResponseFormal(900)
 
 
-def getUrl(filePath, http_host):
+def getUrl(filePath,http_host):
     urls = []
-    server_dm = 'http://' + http_host
+    server_dm = 'http://'+http_host
     filePaths = filePath.split(',')
     if len(filePaths) > 0:
         for path in filePaths:
             if path.find('static/Upgrade/') != -1:
                 path = path.replace('static/Upgrade/', '').replace('\\', '/')
-                url = SERVER_DOMAIN + '/OTA/downloads/' + path + '?time=' + str(time.time())
+                url = SERVER_DOMAIN + '/OTA/downloads/' + path+'?time='+str(time.time())
                 urls.append(url)
             else:
                 url = SERVER_DOMAIN + 'OTA/downloads/' + filePath.replace('\\', '/')
@@ -34,35 +49,33 @@ def getUrl(filePath, http_host):
     else:
         return ''
 
-
-def getUpdataFileUrl(code, http_host, response):
+def getUpdataFileUrl(code,http_host):
     try:
-        equipmentValid = Equipment_Version.objects.filter(code=code, status=1).order_by('-data_joined')
+        equipmentValid = Equipment_Version.objects.filter(code=code,status=1).order_by('-data_joined')
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('查询数据库错误: %s' % errorInfo)
-        return response.json(500, {'details': repr(e)})
+        return ResponseFormal(500,{'details':repr(e)})
     else:
         if equipmentValid:
             equipment = equipmentValid[0]
             file_path = equipment.filePath
-            url = getUrl(file_path, http_host)
-            https_url = getOTAHttps(file_path, http_host)
+            url = getUrl(file_path,http_host)
+            https_url = getOTAHttps(file_path,http_host)
             if len(url) > 0:
-                return response.json(0, {
+                return ResponseFormal(0,{
                     "urlCount": len(url),
                     "url": url,
-                    'https_url': https_url,
+                    'https_url':https_url,
                     "fileSize": equipment.fileSize,
                     "Description": equipment.Description,
                 })
             else:
-                return response.json(901)
+                return ResponseFormal(901)
         else:
-            return response.json(902)
-
+            return ResponseFormal(902)
 
-def getOTAHttps(filePath, http_host):
+def getOTAHttps(filePath,http_host):
     urls = ''
     server_dm = 'https://' + http_host
     if filePath.find('static/Upgrade/') != -1:
@@ -70,56 +83,92 @@ def getOTAHttps(filePath, http_host):
         urls = server_dm + '/OTA/downloads/' + path + '?time=' + str(time.time())
     return urls
 
-def addNewEquipmentVersion(deviceContent, token,response):
+def getDir(fileType, fileName, fileCode, fileVersion):
+    try:
+        if fileCode != None and fileVersion != None:
+            path = '/'.join((BASE_DIR, 'static/Upgrade', fileType, fileCode, fileVersion)).replace('\\', '/') + '/'
+        else:
+            if fileType != 'IPC' and fileType != 'DVR' and fileType != 'NVR' and fileType != 'XVR':
+                path = '/'.join((BASE_DIR, "static/Upgrade", 'Other')).replace('\\', '/')  + '/'
+
+        if not os.path.exists(path):
+            os.makedirs(path)
+            file_name = path + str(fileName)
+            if os.path.exists(file_name):
+                os.remove(file_name)
+            destination = open(file_name, 'wb+')
+            for chunk in fileName.chunks():
+                destination.write(chunk)
+            destination.close()
+        else:
+            file_name = path + str(fileName)
+            if os.path.exists(file_name):
+                os.remove(file_name)
+
+            destination = open(file_name, 'wb+')
+            for chunk in fileName.chunks():
+                destination.write(chunk)
+            destination.close()
+    except Exception as e:
+        errorInfo = traceback.format_exc()
+        print('上传文件错误: %s' % errorInfo)
+        return ResponseFormal(700,{'details':repr(e)})
+    else:
+        index = file_name.find('static/')
+        filePath = file_name[index:]
+        return ResponseFormal(0,{'filePath':filePath})
+
+
+def addNewEquipmentVersion(deviceContent,token):
     """
     :param deviceContent:
     :return:
     """
-    if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        # 设置语言
-        response.lang = tko.res.get('lang', None)
-        if tko.code == 0:
-            userID = tko.userID
-            own_permission = ModelService.check_permission(userID=userID, permID=220)
-            if own_permission is True:
-                try:
-                    deviceData = json.loads(deviceContent)
-                except Exception as e:
-                    print(deviceData)
-                    return response.json(803)
-                else:
-                    version = deviceData.get('version', None)
-                    if version is not None:
-                        filePath = deviceData.get('filePath', None)
-
-                        if filePath is not None:
-                            try:
-                                deviceData['filePath'] = ','.join(filePath)
-                                equipmentVersion = Equipment_Version(
-                                    eid=CommonService.getUserID(getUser=False, setOTAID=True),
-                                    **deviceData)
-                                equipmentVersion.save()
-                            except Exception as e:
-                                errorInfo = traceback.format_exc()
-                                print('添加设备错误: %s ' % errorInfo)
-                                return response.json(806, repr(e))
-                            else:
-                                res =CommonService.qs_to_dict([equipmentVersion])
-                                return response.json(0, res)
-                        else:
-                            return response.json(806)
-                    else:
-                        return response.json(806)
-
-            else:
-                return response.json(404)
-
+    if token is None:
+        return ResponseJSON(311)
+    tokenManager = JSONTokenManager()
+    error_code = tokenManager.verify_AToken(token)
+    if error_code == 0:
+        pass
     else:
-        return response.json(311)
-
+        return tokenManager.errorCodeInfo(error_code)
+    userID = tokenManager.accessDict.get('userID', None)
+    own_permission = ModelService.check_permission(userID=userID, permID=220)
+    if own_permission is not True:
+        # pass
+        return ResponseFormal(404)
+    try:
+        # print(deviceContent)
+        deviceData = json.loads(deviceContent)
+        print('----------')
+        print(deviceData)
+    except Exception as e:
+        return ResponseFormal(803)
+    else:
+        version = deviceData.get('version', None)
+        if version != None:
+            eVersionValid = Equipment_Version.objects.filter(version = version)
+            # if eVersionValid:
+            #     return ResponseFormal(904)
+        else:
+            return ResponseFormal(806)
+        try:
+            filePath = deviceData.get('filePath', None)
 
+            if filePath == None:
+                return ResponseFormal(806)
+            deviceData['filePath'] = ','.join(filePath)
+            equipmentVersion = Equipment_Version(eid = CommonService.getUserID(getUser=False, setOTAID=True), **deviceData)
+            equipmentVersion.save()
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print('添加设备错误: %s ' % errorInfo)
+            return ResponseFormal(806,{'details':repr(e)})
+        else:
+            sqlJSON = serializers.serialize('json', [equipmentVersion])
+            sqlList = json.loads(sqlJSON)
+            sqlDict =dict(zip(["datas"], [sqlList]))
+            return ResponseFormal(0,sqlDict)
 
 def downloadUrl(fileType, fileCode, fileVersion, fileName):
     fullPath = os.path.join(BASE_DIR, "static/Upgrade").replace('\\', '/')
@@ -158,59 +207,24 @@ def downloadUrl(fileType, fileCode, fileVersion, fileName):
             return response
 
         except Exception as e:
-            res =ResponseObject()
-            errorJSON = res.formal(906, {'details': repr(e)})
+            errorJSON = ResponseFormal(906,{'details':repr(e)})
             response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
             response['Content-Error'] = errorJSON
             return response
     else:
-        res = ResponseObject()
-        errorJSON = res.formal(907)
+        errorJSON = ResponseFormal(907)
         response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
         response['Content-Error'] = errorJSON
         return response
 
-def getMD5orSHA265(fileName, encryptionType='MD5'):
-    """
-
-    :param filePath:
-    :param encryptionType:
-    :return:
-    """
-    if not os.path.isfile(fileName):
-        return ''
-    else:
-        if encryptionType == 'MD5':
-            encryption = hashlib.md5()
-        elif encryptionType == 'SHA265':
-            encryption = hashlib.sha256()
-        elif encryptionType == 'CRC32':
-            f = open(fileName, 'rb')
-            chunk = f.read()
-            return crc32(chunk)
-
-        f = open(fileName, 'rb')
-        block_size = 8192  # why is 8192 | 8192 is fast than 2048
-
-        while True:
-            chunk = f.read(block_size)
-            if not chunk:
-                break
-            encryption.update(chunk)
-
-        f.close()
-        return encryption.hexdigest()
-
-
 @csrf_exempt
-def downloadUpdataFileUrl(request):
-    response = ResponseObject()
+def downloadUpdataFileUrl(request, *callback_args, **callback_kwargs):
     if request.method == 'GET':
         request_dict = request.GET
     elif request.method == 'POST':
         request_dict = request.POST
     else:
-        errorJSON = response.formal(801)
+        errorJSON = ResponseFormal(801)
         response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
         response['Content-Error'] = errorJSON
         return response
@@ -220,51 +234,47 @@ def downloadUpdataFileUrl(request):
     fileName = request_dict.get('fileName', None)
     if fileType != None and fileCode != None and fileVersion != \
             None and fileName != None:
-        return downloadUrl(fileType, fileCode, fileVersion, fileName,response)
-
+        response = downloadUrl(fileType, fileCode, fileVersion, fileName)
+        return response
     else:
-        errorJSON = response.formal(800)
+        errorJSON = ResponseFormal(800)
         response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
         response['Content-Error'] = errorJSON
         return response
 
-
 '''
 http://192.168.136.40:8077/OTA/getEquipmentVersion?31AX162001A
 '''
-
-
 @csrf_exempt
-def getEquipmentVersionInterface(request):
-    response = ResponseObject()
+def getEquipmentVersionInterface(request,
+                                 *callback_args, **callback_kwargs):
     if request.method == "POST":
-        request.encoding = 'utf-8'
+        request.encoding ='utf-8'
         code = request.POST.get('code', None)
+
+        if code is not None:
+            response = HttpResponse(getEquipmentVersion(code))
+            return response
+
+        else:
+            return ResponseJSON(800)
     elif request.method == "GET":
         request.encoding = 'gb2312'
         code = request.GET.get('code', None)
-    else:
-        return response.json(801)
-    if code is not None:
-        try:
-            equipmentValid = Equipment_Version.objects.filter(code=code, status=1).order_by('-data_joined')
-        except Exception as e:
-            errorInfo = traceback.format_exc()
-            print('查询数据库错误: %s' % errorInfo)
-            return response.json(500, {'details': repr(e)})
+
+        if code is not None:
+            response = HttpResponse(getEquipmentVersion(code))
+            return response
+
         else:
-            if equipmentValid:
-                equipment = equipmentValid[0]
-                return response.json(0, {'softwareVersion': equipment.softwareVersion})
-            else:
-                return response.json(900)
-    else:
-        return response.json(800)
+            return ResponseJSON(800)
 
+    else:
+        return ResponseJSON(801)
 
 @csrf_exempt
-def getUpdataFileUrlInterface(request):
-    response = ResponseObject()
+def getUpdataFileUrlInterface(request,
+                              *callback_args, **callback_kwargs):
     if request.method == "POST":
         request.encoding = 'utf-8'
         request_dict = request.POST
@@ -272,19 +282,17 @@ def getUpdataFileUrlInterface(request):
         request.encoding = 'utf-8'
         request_dict = request.GET
     else:
-        return response.json(801)
+        return ResponseJSON(801)
     code = request_dict.get('code', None)
     http_host = request.META.get('HTTP_HOST', None)
     if code is not None:
-        return getUpdataFileUrl(code, http_host, response)
+        return HttpResponse(getUpdataFileUrl(code,http_host))
     else:
-        return response.json(800)
-
+        return ResponseJSON(800)
 
 @csrf_exempt
 def downloadUpdataFileUrlInterface(request, fileType, fileName,
                                    *callback_args, **callback_kwargs):
-    res = ResponseObject()
     if fileType is not None and fileName is not None:
         fullPath = os.path.join(BASE_DIR, "static/Upgrade/").replace('\\', '/')
         if fileType == 'IPC':
@@ -310,14 +318,14 @@ def downloadUpdataFileUrlInterface(request, fileType, fileName,
         print(fullPath)
         if os.path.isfile(fullPath):
             try:
-                JSON = res.formal(0)
+                JSON = ResponseFormal(0)
                 if fileType != 'User':
                     wrapper = FileWrapper(open(fullPath, 'rb'))
                     response = HttpResponse(wrapper, content_type="application/octet-stream")
                     response['Content-Length'] = os.path.getsize(fullPath)
                     response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(fullPath)
                     response['Content-MD5'] = getMD5orSHA265(fullPath)
-                    # 校验文件md5值
+                    #校验文件md5值
                     response['Content-SHA265'] = getMD5orSHA265(fullPath, 'SHA265')
                     response['Content-CRC32'] = getMD5orSHA265(fullPath, 'CRC32')
                     response['Content-Error'] = JSON
@@ -327,23 +335,22 @@ def downloadUpdataFileUrlInterface(request, fileType, fileName,
                     response = HttpResponse(Imagedata, content_type="image/jpeg")
                     return response
             except Exception as e:
-                errorJSON = res.formal(906)
+                errorJSON = ResponseFormal(906)
                 response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
                 response['Content-Error'] = errorJSON
                 return response
         else:
-            errorJSON = res.formal(907)
+            errorJSON = ResponseFormal(907)
             response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
             response['Content-Error'] = errorJSON
             return response
 
     else:
-        errorJSON = res.formal(800)
+        errorJSON = ResponseFormal(800)
         response = HttpResponse(errorJSON, content_type='text/plain', charset='utf-8')
         response['Content-Error'] = errorJSON
         return response
 
-
 class getUploadFiletoDirView(TemplateView):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -351,45 +358,55 @@ class getUploadFiletoDirView(TemplateView):
 
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
-        request_dict = request.POST
+
+        token = request.POST.get('token', None)
+        fileType = request.POST.get('fileType', None)
+        fileCode = request.POST.get('fileCode', None)
+        fileVersion = request.POST.get('fileVersion', None)
         fileName = request.FILES.get('fileName', None)
-        return self.ValidationError(request_dict,fileName)
+
+        return self.ValidationError(token, fileType, fileName,
+                                     filefileCode=fileCode, fileVersion=fileVersion)
 
     def get(self, request, *args, **kwargs):
         request.encoding = 'gb2312'
-        request_dict = request.GET
+
+        token = request.GET.get('token', None)
+        fileType = request.GET.get('fileType', None)
+        fileCode = request.GET.get('fileCode', None)
+        fileVersion = request.GET.get('fileVersion', None)
         fileName = request.FILES.get('fileName', None)
-        return self.ValidationError(request_dict,fileName)
-
-    def ValidationError(self, request_dict,fileName):
-        response = ResponseObject()
-        token = request_dict.get('token', None)
-        fileType = request_dict.get('fileType', None)
-        fileCode = request_dict.get('fileCode', None)
-        fileVersion = request_dict.get('fileVersion', None)
+        return self.ValidationError(token, fileType, fileName,filefileCode=fileCode, fileVersion=fileVersion)
+
+    def ValidationError(self, token, fileType, fileName, *args, **kwargs):
         if fileName != None and fileType != None and token != None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
-                if userID is not None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                if userID:
                     own_permission = ModelService.check_permission(userID=userID, permID=210)
                     if own_permission is True:
+                        fileCode = kwargs.get('fileCode', None)
+                        fileVersion = kwargs.get('fileVersion', None)
                         if fileVersion != None and fileCode != None:
-                            return self.getUploadFiletoDir(userID, fileType, fileName,response,fileCode, fileVersion=fileVersion)
+                            response = HttpResponse(self.getUploadFiletoDir(userID, fileType, fileName,
+                                                                            fileCode, fileVersion=fileVersion))
+                            return response
                         else:
-                            return self.getUploadFiletoDir(userID, fileType, fileName,response)
+                            response = HttpResponse(self.getUploadFiletoDir(userID, fileType, fileName))
+                            return response
                     else:
-                        return response.json(404)
+                        return ResponseJSON(404)
                 else:
-                    return response.json(310)
+                    return ResponseJSON(310)
             else:
-                return response.json(tko.code)
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
         else:
-            return response.json(800)
+            return ResponseJSON(800)
 
-    def getUploadFiletoDir(self, userID, fileType, fileName,response, *args, **kwargs):
+    def getUploadFiletoDir(self, userID, fileType, fileName, *args, **kwargs):
         """
         将上传的文件写入服务器对应目录下
         :param Type: equipment type
@@ -397,17 +414,17 @@ class getUploadFiletoDirView(TemplateView):
         :return: filePath
         """
         try:
-            User = Device_User.objects.filter(userID=userID)
+            User = Device_User.objects.filter(userID = userID)
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('查询数据库错误: %s' % errorInfo)
-            return response.json(500, {'details': repr(e)})
+            return ResponseFormal(500,{'details':repr(e)})
         else:
             if not User:
-                return response.json(113)
-            own_perm = ModelService.check_permission(userID, permID=210)
+                return ResponseFormal(113)
+            own_perm = ModelService.check_permission(userID,permID=210)
             if own_perm is not True:
-                return response.json(605)
+                return ResponseFormal(605)
             updataFile = fileName.name
             updataFile = updataFile.replace(' ', '+')
             versionIndex = updataFile.find('.', updataFile.find('.', updataFile.find('.') + 1) + 1)
@@ -418,88 +435,63 @@ class getUploadFiletoDirView(TemplateView):
                 fileCode = len(updataFile[versionIndex + 1: codeIndex]) > 0 and \
                            updataFile[versionIndex + 1: codeIndex] or None
                 if fileCode is not None and fileVersion is not None:
-                    return self.getDir(fileType, fileName, fileCode, fileVersion)
+                    return getDir(fileType, fileName, fileCode, fileVersion)
                 else:
                     fileCode = kwargs.get('fileCode', None)
                     fileVersion = kwargs.get('fileVersion', None)
                     print(fileCode, fileVersion)
                     if fileCode != None and fileVersion != None:
-                        return self.getDir(fileType, fileName, fileCode, fileVersion)
+                        return getDir(fileType, fileName, fileCode, fileVersion)
                     else:
-                        return response.json(903)
+                        return ResponseFormal(903)
             else:
                 fileCode = kwargs.get('fileCode', None)
                 fileVersion = kwargs.get('fileVersion', None)
                 if fileCode != None and fileVersion != None:
-                    return self.getDir(fileType, fileName, fileCode, fileVersion,response)
+                    return getDir(fileType, fileName, fileCode, fileVersion)
                 else:
-                    return response.json(903)
-
-    def getDir(self,fileType, fileName, fileCode, fileVersion, response):
-        try:
-            if fileCode != None and fileVersion != None:
-                path = '/'.join((BASE_DIR, 'static/Upgrade', fileType, fileCode, fileVersion)).replace('\\', '/') + '/'
-            else:
-                if fileType != 'IPC' and fileType != 'DVR' and fileType != 'NVR' and fileType != 'XVR':
-                    path = '/'.join((BASE_DIR, "static/Upgrade", 'Other')).replace('\\', '/') + '/'
-
-            if not os.path.exists(path):
-                os.makedirs(path)
-                file_name = path + str(fileName)
-                if os.path.exists(file_name):
-                    os.remove(file_name)
-                destination = open(file_name, 'wb+')
-                for chunk in fileName.chunks():
-                    destination.write(chunk)
-                destination.close()
-            else:
-                file_name = path + str(fileName)
-                if os.path.exists(file_name):
-                    os.remove(file_name)
-
-                destination = open(file_name, 'wb+')
-                for chunk in fileName.chunks():
-                    destination.write(chunk)
-                destination.close()
-        except Exception as e:
-            errorInfo = traceback.format_exc()
-            print('上传文件错误: %s' % errorInfo)
-            return response.json(700, {'details': repr(e)})
-        else:
-            index = file_name.find('static/')
-            filePath = file_name[index:]
-            return response.json(0, {'filePath': filePath})
-
+                    return ResponseFormal(903)
 
 @csrf_exempt
-def addNewEquipmentVersionInterface(request):
-
-    response = ResponseObject()
+def addNewEquipmentVersionInterface(request, *callback_args,
+                                    **callback_kwargs):
     if request.method == "POST":
         request.encoding = 'utf-8'
-        request_dict = request.POST
+        deviceContent = request.POST.get('content', None).encode('utf-8')
+        token = request.POST.get('token', None)
+        deviceContent = str(deviceContent, encoding='utf-8')
+        deviceContent = deviceContent.replace(' ', ' ').replace('\'', '\"')
+        print(deviceContent, type(deviceContent))
+        if deviceContent is not None:
+            response = HttpResponse(addNewEquipmentVersion(deviceContent,token))
+            return response
+        else:
+            return ResponseJSON(800)
+
     elif request.method == "GET":
         request.encoding = 'gb2312'
-        request_dict = request.GET
-    else:
-        return response.json(801)
-    deviceContent = request_dict.get('content', None).encode('utf-8')
-    token = request_dict.get('token', None)
-    deviceContent = str(deviceContent, encoding='utf-8')
-    deviceContent = deviceContent.replace(' ', ' ').replace('\'', '\"')
-    if deviceContent is not None:
-        return addNewEquipmentVersion(deviceContent, token,response)
-    else:
-        return response.json(800)
 
+        deviceContent = request.GET.get('content', None).encode('gb2312')
+        deviceContent = str(deviceContent, encoding='gb2312')
+        token = request.GET.get('token', None)
+        deviceContent = deviceContent.replace(' ', ' ').replace('\'', '\"')
+        if deviceContent is not None:
+            response = HttpResponse(addNewEquipmentVersion(deviceContent,token))
+            return response
 
-def showAllEquipmentVersion(userID,response):
+        else:
+            return ResponseJSON(800)
+    else:
+        return ResponseJSON(801)
+
+@csrf_exempt
+def showAllEquipmentVersion(userID):
     try:
-        userValid = Device_User.objects.filter(userID=userID).order_by('-data_joined')
+        userValid = Device_User.objects.filter(userID = userID).order_by('-data_joined')
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('查询数据库错误: %s' % errorInfo)
-        return response.json(500)
+        return ResponseFormal(500)
     else:
         if userValid:
             own_permission = ModelService.check_permission(userID=userID, permID=240)
@@ -508,33 +500,143 @@ def showAllEquipmentVersion(userID,response):
                 sqlList = json.loads(sqlJSON)
                 print(sqlList, sqlJSON)
                 sqlDict = dict(zip(["datas"], [sqlList]))
-                return response.json(0, sqlDict)
+                return ResponseFormal(0,sqlDict)
             else:
-                return response.json(604)
+                return ResponseFormal(604)
         else:
-            return response.json(113)
-
+            return ResponseFormal(113)
 
 @csrf_exempt
-def showAllEquipmentVersionInterface(request):
-    response = ResponseObject()
+def showAllEquipmentVersionInterface(request, *callback_args,
+                                 **callback_kwargs):
     if request.method == 'POST':
         token = request.POST.get('token', None)
+
+        if token != None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                if userID:
+                    response = HttpResponse(showAllEquipmentVersion(userID))
+                    return response
+                else:
+                    return ResponseJSON(310)
+            else:
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
+
+        else:
+            return ResponseJSON(800)
+
     elif request.method == 'GET':
         token = request.GET.get('token', None)
-    if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
-            if userID:
-                return showAllEquipmentVersion(userID,response)
+
+        if token != None:
+            tM = JSONTokenManager()
+            error_code = tM.verify_AToken(token)
+            if error_code == 0:
+                userID = tM.accessDict.get('userID', None)
+                if userID:
+                    response = HttpResponse(showAllEquipmentVersion(userID))
+                    return response
+                else:
+                    return ResponseJSON(310)
+
             else:
-                return response.json(310)
+                response = HttpResponse(tM.errorCodeInfo(error_code))
+                return response
         else:
-            return response.json(tko.code)
+            return ResponseJSON(800)
+
+import zlib
+@csrf_exempt
+def getCRC32(filePath):
+    print(filePath)
+    block_size = 1024 * 1024
+    crc = 0
+
+    try:
+        fd = open(filePath, 'rb')
+        while True:
+            buffer = fd.read(block_size)
+            if len(buffer) == 0:  # EOF or file empty. return hashes
+                fd.close()
+                return crc  # 返回的是十进制的值
+
+            crc = zlib.crc32(buffer, crc)
+    except Exception as e:
+        return ResponseFormal(908,{'details':repr(e)})
+
+def getMD5orSHA265(fileName, encryptionType='MD5'):
+    """
+
+    :param filePath:
+    :param encryptionType:
+    :return:
+    """
+    if not os.path.isfile(fileName):
+        return ''
     else:
-        return response.json(800)
+        if encryptionType == 'MD5':
+            encryption = hashlib.md5()
+        elif encryptionType == 'SHA265':
+            encryption = hashlib.sha256()
+        elif encryptionType == 'CRC32':
+            f = open(fileName, 'rb')
+            chunk = f.read()
+            return crc32(chunk)
+
+        f = open(fileName, 'rb')
+        block_size = 8192  # why is 8192 | 8192 is fast than 2048
+
+        while True:
+            chunk = f.read(block_size)
+            if not chunk:
+                break
+            encryption.update(chunk)
+
+        f.close()
+        return encryption.hexdigest()
 
+def CRC(fileName):
+    fd = open(fileName, 'rb')
+    dwSize = os.path.getsize(fileName)
+    lpBuffer = fd.read()
+
+    crc = -1
+    CRC32Table = [0] * 256
+    ulPolynomial = 0x04C11DB7
+    len = dwSize
+    buffer = lpBuffer
+    for index in range(0xFF):
+        value = 0
+        ref = index
+
+        for n in range(9):
+            if ref & 1:
+                value |= 1 << (8 - n)
+            ref >>= 1
+
+        CRC32Table[index] = value << 24
+        for j in range(8):
+            CRC32 = CRC32Table[index] & (1 << 31) and ulPolynomial or 0
+            CRC32Table[index] = (CRC32Table[index] << 1) ^ CRC32
+        value = 0
+        ref = CRC32Table[index]
+        for n in range(33):
+            if ref & 1:
+                value |= 1 << (32 - n)
+            ref >>= 1
+        CRC32Table[index] = value
+
+    index = 0
+    while len:
+        len -= 1
+        crc = (crc >> 8) ^ CRC32Table[(crc & 0xFF) ^ buffer[index]]
+        index += 1
+
+    print(crc ^ 0xffffffff)
+
+    return crc ^ 0xffffffff
 

+ 106 - 255
Controller/OauthManage.py

@@ -11,276 +11,127 @@
 @file: OauthManage.py
 @Contact: chanjunkai@163.com
 """
-from var_dump import var_dump
-from django.utils.timezone import utc
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
-from Model.models import oauth_user, Device_User
-from Service.ModelService import ModelService
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
-from Service.CommonService import CommonService
-from Controller.CheckUserData import DataValid
+from Service.TokenManager import *
+from Model.models import oauth_user,Auth_Captcha
 from django.contrib import auth
-import json, requests, datetime
-from django.contrib.auth.hashers import make_password  # 对密码加密模块
-from Ansjer.config import DOMAIN_OAUTH_URI
-
-'''
-http://192.168.136.40:8077/oauth/relate/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvaWQiOiI3N2EzNzJmYi1jNDdiLTQ5OWQtYmY3Ni0wMTIwNzdiNGRiM2MiLCJleHAiOjE1MzQyMTE1MDR9.9DAwCctDk_qwn1kHfPqkvSGiFMunnb7I9mU44YlNchE
-'''
-
+from django.http import HttpResponseRedirect
+import json
+from Service.ResponseService import *
+import requests
+from Service.ModelService import ModelService
+from django.middleware.csrf import get_token
+from django.http import JsonResponse
 
-class OauthRelateView(View):
+class OauthManage(View):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
-        return super(OauthRelateView, self).dispatch(*args, **kwargs)
-
-    # 定义host
-    __http_host = None
-
+        return super(OauthManage, self).dispatch(*args, **kwargs)
     # 查询
-    def get(self, request):
-        request.encoding = 'utf-8'
-        self.__http_host = request.META.get('PATH_INFO', None)
-        response = ResponseObject()
-        token = request.GET.get('token', None)
-        return self.relate(token, response)
+    def get(self, request, *args, **kwargs):
 
+        return
     # 认证登录
-    def post(self, request):
-        self.__http_host = request.META.get('PATH_INFO', None)
-        response = ResponseObject()
+    def post(self, request, *args, **kwargs):
         try:
             json_data = json.loads(request.body.decode("utf-8"))
         except Exception as e:
             print(repr(e))
-            return response.json(10, repr(e))
+            return ResponseJSON(10,repr(e))
         else:
-            token = json_data.get('token', None)
-            return self.relate(token, response)
-
-    def relate(self, token, response):
-
-        if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            # 设置语言
-            response.lang = tko.lang
-            if tko.code == 0:
-                oid = tko.oid
-                if oid is not None:
-                    # 判断用户是否已关联
-                    userID = tko.userID()
-                    if userID is not None:
-                        return self.loginUpdate(userID, response)
-                    # 未关联情况下进行关联,并创建用户
-                    else:
-                        return self.relateUser(oid, token, response)
-
-                else:
-                    return response.json(444, 'oid')
-            else:
-                return response.json(tko.code)
-        else:
-            return response.json(444, 'token')
-
-    def loginUpdate(self, userID, response):
-        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
-        userData = Device_User.objects.filter(userID=userID)
-        userData.update(last_login=now_time, online=True)
-        return self.responseRes(userData[0], response)
-
-    def relateUser(self, oid, token, response):
-        try:
-            http_oauth = requests.get(
-                url='{domain_oauth}accounts/{oid}/'.format(oid=oid, domain_oauth=DOMAIN_OAUTH_URI),
-                params={'token': token}
-            )
-            get_res = http_oauth.json()
-        except Exception as e:
-            return response.json(10, repr(e))
-        else:
-            code = get_res.get('code', None)
-            if code == 0:
-                datas = get_res['res']
-                username = datas.get('username', None)
-                password = datas.get('password', None)
-                userValid = Device_User.objects.filter(username=username)
+            access_token = json_data.get('access_token', None)
+            if access_token is not None:
                 try:
-                    if userValid.exists():
-                        UserData = userValid[0]
-                    else:
-                        dataValid = DataValid()
-                        if dataValid.email_validate(username):
-                            UserData = Device_User(username=username, userEmail=username, password=password,
-                                                   userID=CommonService.getUserID(μs=False, setOTAID=True),
-                                                   is_active=True, user_isValid=True)
-                        else:
-                            UserData = Device_User(username=username, password=password,
-                                                   userID=CommonService.getUserID(μs=False, setOTAID=True),
-                                                   is_active=True, user_isValid=True)
-                        UserData.save()
+                    ser = requests.get(url='http://192.168.136.45:9898/accounts/user/',
+                                       data={'access_token': access_token})
+                    ser_data = json.loads(ser.content)
                 except Exception as e:
-                    var_dump(repr(e))
-                    return response.json(106)
-                else:
-                    ourValid = oauth_user.objects.get_or_create(oid=oid, userID=UserData)
-                    if ourValid:
-                        return self.responseRes(UserData, response)
-                    else:
-                        UserData.delete()
-                        return response.json(106)
-
-            else:
-                return response.json(code)
-
-    def responseRes(self, UserData, response):
-        if UserData.userID and UserData.username:
-            res = {}
-            role_dict = ModelService.own_role(userID=UserData.userID)
-            res['rid'] = role_dict['rid']
-            res['roleName'] = role_dict['roleName']
-            res['permList'] = ModelService.own_permission(UserData.userID)
-            res['username'] = UserData.username
-            res['email'] = UserData.userEmail
-            res['nickname'] = UserData.NickName
-            print(res)
-            return response.json(0, res)
-        else:
-            return response.json(10, 'userID,username参数错误')
-
-
-class OauthResUserView(View):
-    @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(OauthResUserView, self).dispatch(*args, **kwargs)
-
-    # 查询
-    def get(self, request):
-        request.encoding = 'utf-8'
-        response = ResponseObject()
-        username = request.GET.get('username', None)
-        password = request.GET.get('password', None)
-        return self.validate(username, password, response)
-
-    # 认证登录
-    def post(self, request):
-        response = ResponseObject()
-        try:
-            print(request.body.decode("utf-8"))
-            json_data = json.loads(request.body.decode("utf-8"))
-        except Exception as e:
-            var_dump(repr(e))
-            return response.json(10, repr(e))
-        else:
-            username = json_data.get('username', None)
-            password = json_data.get('password', None)
-            return self.validate(username, password, response)
-
-    def validate(self, username, password, response):
-        if username is not None:
-            dataValid = DataValid()
-            if dataValid.mobile_validate(username):
-                user_qs = Device_User.objects.filter(username=username)
-            elif dataValid.email_validate(username):
-                user_qs = Device_User.objects.filter(username=username)
-            else:
-                return response.json(104)
-            if user_qs.exists():
-                if user_qs[0].user_isValid and user_qs[0].is_active:
-                    User = auth.authenticate(username=user_qs[0].username, password=password)
-                    if User:
-                        res = {'username': user_qs[0].username}
-                        return response.json(0, res)
-                    else:
-                        return response.json(111)
+                    print(repr(e))
+                    return ResponseJSON(10,repr(e))
                 else:
-                    return response.json(110)
-            else:
-                return response.json(102)
-        else:
-            return response.json(444,'username')
-
-
-class ModifyRSPwdView(View):
-    @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(ModifyRSPwdView, self).dispatch(*args, **kwargs)
-
-    # 查询
-    def get(self, request):
-        response = ResponseObject()
-        request_dict = request.GET
-        return self.validate(request_dict, response)
-
-    # 认证登录
-    def post(self, request):
-        response = ResponseObject()
-        try:
-            print(request.body.decode("utf-8"))
-            json_data = json.loads(request.body.decode("utf-8"))
-        except Exception as e:
-            from var_dump import var_dump
-            var_dump(repr(e))
-            return response.json(10, repr(e))
-        else:
-            request_dict = json_data
-            return self.validate(request_dict, response)
-
-    def validate(self, request_dict, response):
-        username = request_dict.get('username', None)
-        oldPwd = request_dict.get('oldPwd', None)
-        newPwd = request_dict.get('newPwd', None)
-
-        UserAuth = auth.authenticate(username=username, password=oldPwd)
-        if UserAuth:
-            return self.ModifyPwd(username, newPwd, response)
-        else:
-            return response.json(99)
-
-    def ModifyPwd(self, username, newPwd, response):
-        user_qs = Device_User.objects.filter(username=username)
-        upCount = user_qs.update(password=make_password(newPwd))
-        if upCount:
-            return response.json(0)
-
-
-class OauthForgetView(View):
-    @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(OauthForgetView, self).dispatch(*args, **kwargs)
-
-    # 查询
-    def get(self, request):
-        response = ResponseObject()
-        request_dict = request.GET
-        return self.validate(request_dict, response)
-
-    # 认证登录
-    def post(self, request):
-        response = ResponseObject()
-        try:
-            json_data = json.loads(request.body.decode("utf-8"))
-        except Exception as e:
-            from var_dump import var_dump
-            var_dump(repr(e))
-            return response.json(10, repr(e))
-        else:
-            request_dict = json_data
-            return self.validate(request_dict, response)
-
-    def validate(self, request_dict, response):
-        username = request_dict.get('username', None)
-        dataValid = DataValid()
-        if dataValid.email_validate(username):
-            user_qs = Device_User.objects.filter(userEmail=username)
-        elif dataValid.mobile_validate(username):
-            user_qs = Device_User.objects.filter(username=username)
-        else:
-            return response.json(9)
-        if user_qs.exists():
-            return response.json(0, {'password': user_qs[0].password})
-        else:
-            return response.json(9)
+                    oid = ser_data['oid']
+                    if oid is not None:
+                        ou = oauth_user.objects.filter(oid=oid)
+                        # 用户存在情况查找绑定用户
+                        if ou.exists():
+                            user_qs =ou[0].userID
+                            userID = user_qs.userID
+                        #用户不存在情况新增一个用户
+                        else:
+                            oid = ser_data['oid']
+                            username = ser_data['username']
+                            password = ser_data['password']
+                            email = ser_data['email']
+                            try:
+                                CaptchaRecord = Auth_Captcha()
+                                CaptchaRecord.authcaptca = '1234'
+                                CaptchaRecord.username = username
+                                CaptchaRecord.sendtype = 'register'
+                                CaptchaRecord.save()
+                            except Exception as e:
+                                return ResponseJSON(10,repr(e))
+                            try:
+                                UserData = Device_User(username=username, userEmail=email, password=password,
+                                                       userID=CommonService.getUserID(μs=False, setOTAID=True),
+                                                       is_active=True, user_isValid=True)
+                                UserData.save()
+                            except Exception as e:
+                                errorInfo = traceback.format_exc()
+                                print('Create User Error: %s' % errorInfo)
+                                return ResponseJSON(424,'Create User Error:' + repr(e))
+                            else:
+                                ourValid = oauth_user.objects.create(oid=oid, userID=UserData)
+                                if ourValid:
+                                    userID = UserData.userID
+                        if userID:
+                            userValid = Device_User.objects.filter(userID=userID)
+                            if userValid.exists():
+                                authtoken_Obj = AuthToken_Token.objects.filter(tokenID_id=userID)
+                                if authtoken_Obj.exists():
+                                    tokenManager = JSONTokenManager()
+                                    access_token = tokenManager.deToken(authtoken_Obj[0].access_token)
+                                    refresh_token = tokenManager.deToken(authtoken_Obj[0].refresh_token)
+                                else:
+                                    access_token = False
+                                    refresh_token = False
+                                if access_token is not False and refresh_token is not False:
+                                    resultDict = {
+                                        'result': {'access_token': access_token, 'refresh_token': refresh_token},
+                                        'error_code': 0}
+                                else:
+                                    JSON = json.dumps({'userID': userID, 'mCode': ''}, ensure_ascii=False)
+                                    tokenManager = JSONTokenManager()
+                                    tokenJSON = tokenManager.generate_AToken(JSON=JSON,
+                                                                             iCode=tokenManager.getSalt(strLen=8))
+                                    resultDict = json.loads(tokenJSON)
+                                error_code = resultDict.get('error_code', None)
+                                if error_code != None and error_code == 0:
+                                    result = resultDict.get('result', None)
+                                    if result != None:
+                                        import datetime
+                                        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+                                        userValid.update(last_login=now_time, online=True)
+                                        role_dict = ModelService.own_role(userID=userID)
+                                        result['rid'] = role_dict['rid']
+                                        result['roleName'] = role_dict['roleName']
+                                        result['permList'] = ModelService.own_permission(userID)
+                                        result['username'] = userValid[0].username
+                                        return ResponseJSON(0, result)
+
+        return ResponseJSON(10)
+    # 修改 资源改变
+    def put(self, request):
+        return ResponseJSON(404)
+
+    # 修改 属性改变
+    def PATCH(self, request):
+        return ResponseJSON(404)
+
+    # 删除
+    def delete(self, request):
+        return ResponseJSON(404)
+
+    def validation(self, request_dict, *args, **kwargs):
+        return ResponseJSON(404)

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 474 - 182
Controller/PermissionManager.py


+ 145 - 149
Controller/StreamMedia.py

@@ -1,19 +1,20 @@
 from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
 from Model.models import Equipment_Stream
 from Object.AWS.S3ClassObject import S3ClassObject
 from Object.AWS.ElasticTranscoder import ElasticTranscoder
-import traceback, xmltodict, requests, re, subprocess, time, os,simplejson as json
+import traceback, xmltodict, requests, re, subprocess
 from ffmpy import FFmpeg
+import time
 from Object.AWS.CloudfrontSignCookie import BetterThanBoto
-from Ansjer.config import NGINX_RTMP_STAT, RTMP_PUSH_URL
-from Ansjer.settings import BASE_DIR
-from Object.TokenObject import TokenObject
-from Object.ResponseObject import ResponseObject
-from Service.CommonService import CommonService
-from django.http import HttpResponse
+from Ansjer.settings import NGINX_RTMP_STAT,RTMP_PUSH_URL
+from Service.ResponseService import *
+from Ansjer.config import BASE_DIR
+import os
+
 '''
 移动端=>
 增:
@@ -67,62 +68,58 @@ class StreamMedia(View):
         return self.validation(request_dict=request.POST)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
         token = request_dict.get('token', None)
         if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                userID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                userID = tokenManager.accessDict.get('userID', None)
                 own_permission = ModelService.check_permission(userID=userID, permID=60)
                 if own_permission is not True:
-                    operation = request_dict.get('operation', None)
-                    if operation == 'add':
-                        return self.add_stream(token=token, request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'delete':
-                        return self.delete_stream(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'update':
-                        return self.update_stream(userID=userID, request_dict=request_dict, response=response)
-                    elif operation == 'query':
-                        return self.query_stream(userID=userID, response=response)
-                    elif operation == 'getDelVideo':
-                        return self.get_del_video(userID=userID, request_dict=request_dict, response=response)
-                    elif operation == 'getAllVideo':
-                        return self.get_all_video(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getVodUrl':
-                        return self.get_vod_url(request_dict=request_dict, response=response)
-                    elif operation == 'getVodHls':
-                        return self.get_vod_hls(request_dict=request_dict, response=response)
-                    elif operation == 'getAdminAllStream':
-                        return self.get_admin_all_stream(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getAdminDelStream':
-                        return self.get_admin_del_stream(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getAdminUpdateStream':
-                        return self.get_admin_update_stream(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getAdminVodUrl':
-                        return self.get_admin_vod_url(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getAdminFindStream':
-                        return self.get_admin_find_stream(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getAdminDelVideo':
-                        return self.get_admin_del_video(request_dict=request_dict, userID=userID, response=response)
-                    elif operation == 'getAllServerJson':
-                        return self.get_all_server_json(userID=userID, response=response)
-                    elif operation == 'getAdminHlsVod':
-                        return self.get_admin_hls_vod(userID=userID, request_dict=request_dict, response=response)
-                    elif operation == 'getAdminAddStream':
-                        return self.get_admin_add_stream(userID=userID, request_dict=request_dict, response=response)
-                    else:
-                        return response.json(444, 'operation')
+                    return ResponseJSON(404)
+                operation = request_dict.get('operation', None)
+                if operation == 'add':
+                    return self.add_stream(token=token, request_dict=request_dict, userID=userID)
+                elif operation == 'delete':
+                    return self.delete_stream(request_dict=request_dict, userID=userID)
+                elif operation == 'update':
+                    return self.update_stream(userID=userID, request_dict=request_dict)
+                elif operation == 'query':
+                    return self.query_stream(userID=userID)
+                elif operation == 'getDelVideo':
+                    return self.get_del_video(userID=userID, request_dict=request_dict)
+                elif operation == 'getAllVideo':
+                    return self.get_all_video(request_dict=request_dict, userID=userID)
+                elif operation == 'getVodUrl':
+                    return self.get_vod_url(request_dict=request_dict)
+                elif operation == 'getVodHls':
+                    return self.get_vod_hls(request_dict=request_dict)
+                elif operation == 'getAdminAllStream':
+                    return self.get_admin_all_stream(request_dict=request_dict, userID=userID)
+                elif operation == 'getAdminDelStream':
+                    return self.get_admin_del_stream(request_dict=request_dict, userID=userID)
+                elif operation == 'getAdminUpdateStream':
+                    return self.get_admin_update_stream(request_dict=request_dict, userID=userID)
+                elif operation == 'getAdminVodUrl':
+                    return self.get_admin_vod_url(request_dict=request_dict, userID=userID)
+                elif operation == 'getAdminFindStream':
+                    return self.get_admin_find_stream(request_dict=request_dict, userID=userID)
+                elif operation == 'getAdminDelVideo':
+                    return self.get_admin_del_video(request_dict=request_dict, userID=userID)
+                elif operation == 'getAllServerJson':
+                    return self.get_all_server_json(userID=userID)
+                elif operation == 'getAdminHlsVod':
+                    return self.get_admin_hls_vod(userID=userID, request_dict=request_dict)
+                elif operation == 'getAdminAddStream':
+                    return self.get_admin_add_stream(userID=userID, request_dict=request_dict)
                 else:
-                    return response.json(404)
-
+                    return ResponseJSON(444)
             else:
-                return response.json(tko.code)
+                return HttpResponse(tokenManager.errorCodeInfo(error_code))
         else:
-            return response.json(311)
+            return ResponseJSON(311)
 
-    def add_stream(self, token, userID, request_dict, response):
+    def add_stream(self, token, userID, request_dict):
         channel = request_dict.get('channel', None)
         status = request_dict.get('status', None)
         uid = request_dict.get('uid', None)
@@ -132,54 +129,54 @@ class StreamMedia(View):
             if is_user is True:
                 stream_queryset = Equipment_Stream.objects.filter(userID=userID, uid=uid, channel=channel, rank=1)
                 if stream_queryset.exists():
-                    return response.json(174)
+                    return ResponseJSON(174)
                 try:
                     flag = Equipment_Stream.objects.create(userID=userID, status=status, uid=uid, channel=channel,
                                                            access_token=token)
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, errorInfo)
+                    return ResponseJSON(424, errorInfo)
                 else:
                     if flag:
                         rtmp_url = RTMP_PUSH_URL
                         rtmp_name = uid + '_' + channel + '?userID=' + userID + '&uid=' + uid + '&channel=' + channel + '&access_token=' + token
-                        return response.json(0, {'userID': userID, 'channel': channel,
-                                                 'uid': uid,
-                                                 'status': status,
-                                                 'access_token': token,
-                                                 'rtmp_url': rtmp_url,
-                                                 'rtmp_name': rtmp_name})
+                        return ResponseJSON(0, {'userID': userID, 'channel': channel,
+                                                'uid': uid,
+                                                'status': status,
+                                                'access_token': token,
+                                                'rtmp_url': rtmp_url,
+                                                'rtmp_name': rtmp_name})
             else:
-                return response.json(14)
+                return ResponseJSON(14)
         else:
-            return response.json(444, 'channel, status, uid')
+            return ResponseJSON(444)
 
-    def delete_stream(self, request_dict, userID,response):
+    def delete_stream(self, request_dict, userID):
         id_list = request_dict.getlist('id', None)
         if len(id_list):
             for id in id_list:
                 Equipment_Stream.objects.filter(id=id, userID=userID).delete()
-            return response.json(0)
-        return response.json(444)
+            return ResponseJSON(0)
+        return ResponseJSON(444)
 
-    def update_stream(self, userID, request_dict,response):
+    def update_stream(self, userID, request_dict):
         id = request_dict.get('id', None)
         status = request_dict.get('status', None)
         is_update = Equipment_Stream.objects.filter(id=id, userID=userID).update(status=status)
         if is_update:
-            return response.json(0, {'id': id, 'status': status})
-        return response.json(444)
+            return ResponseJSON(0,{'id': id, 'status': status})
+        return ResponseJSON(444)
 
-    def query_stream(self, userID,response):
+    def query_stream(self, userID):
         equipment_stream_queryset = Equipment_Stream.objects.filter(userID=userID)
         if equipment_stream_queryset.exists():
-            res = CommonService.qs_to_dict(equipment_stream_queryset)
-            return response.json(0,res)
-        else:
-            return response.json(0)
+            send_josn = CommonService.query_set_to_dict(equipment_stream_queryset)
+            return HttpResponse(CommonService.response_formal(
+                data={'code': 0, 'reason': u'Success', 'result': send_josn}))
+        return ResponseJSON(444)
 
-    def get_all_video(self, request_dict, userID,response):
+    def get_all_video(self, request_dict, userID):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         if uid is not None and channel is not None:
@@ -188,23 +185,24 @@ class StreamMedia(View):
             if own_permission is True or own_device is True:
                 s3 = S3ClassObject()
                 data = s3.get_all_object(prefix=uid + '_' + channel + '/flv')
-                return response.json(0, {'files': data})
+                # data = s3.get_all_object(prefix=uid + '_' + channel + '/')
+                return ResponseJSON(0, {'files': data})
             else:
-                return response.json(404)
-        return response.json(444,'uid,channel')
+                return ResponseJSON(404)
+        return ResponseJSON(444)
 
-    def get_vod_url(self, request_dict,response):
+    def get_vod_url(self, request_dict):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         filename = request_dict.get('filename', None)
         if uid is not None and filename is not None and channel is not None:
             s3 = S3ClassObject()
             url = s3.get_generate_vod_url(uid + '_' + channel + '/' + filename)
-            return response.json(0, {'url': url})
+            return ResponseJSON(0, {'url': url})
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def get_admin_all_stream(self, request_dict, userID,response):
+    def get_admin_all_stream(self, request_dict, userID):
         # 判断
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
@@ -214,16 +212,16 @@ class StreamMedia(View):
             if equipment_stream_queryset.exists():
                 equipment_stream_count = equipment_stream_queryset.count()
                 equipment_stream_res = equipment_stream_queryset[(page - 1) * line:page * line]
-                send_json = CommonService.qs_to_dict(equipment_stream_res)
+                send_json = CommonService.query_set_to_dict(equipment_stream_res)
                 send_json['count'] = equipment_stream_count
-                send_json = CommonService.qs_to_dict(equipment_stream_queryset)
-                return response.json(0, send_json)
+                send_json = CommonService.query_set_to_dict(equipment_stream_queryset)
+                return ResponseJSON(0, send_json)
             else:
-                return response.json(0)
+                return ResponseJSON(0)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def get_admin_del_stream(self, request_dict, userID,response):
+    def get_admin_del_stream(self, request_dict, userID):
         # 判断
         own_permission = ModelService.check_permission(userID=userID, permID=10)
         if own_permission is True:
@@ -232,12 +230,12 @@ class StreamMedia(View):
             if len(id_list):
                 for id in id_list:
                     Equipment_Stream.objects.filter(id=id).delete()
-                return response.json(0)
+                return ResponseJSON(0)
             else:
-                return response.json(444)
-        return response.json(404)
+                return ResponseJSON(444)
+        return ResponseJSON(404)
 
-    def get_admin_del_video(self, request_dict, userID,response):
+    def get_admin_del_video(self, request_dict, userID):
         # 判断
         own_permission = ModelService.check_permission(userID=userID, permID=10)
         if own_permission is True:
@@ -259,11 +257,11 @@ class StreamMedia(View):
                         s3 = S3ClassObject()
                         response = s3.del_object_list(keylist=key_list)
                         if response['Deleted']:
-                            return response.json(0,
-                                                {'deleted': response['Deleted']})
-        return response.json(444)
+                            return ResponseJSON(0,
+                                                                             {'deleted': response['Deleted']})
+        return ResponseJSON(444)
 
-    def get_del_video(self, request_dict, userID,response):
+    def get_del_video(self, request_dict, userID):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         if uid is not None and channel is not None:
@@ -282,12 +280,12 @@ class StreamMedia(View):
                         s3 = S3ClassObject()
                         response = s3.del_object_list(keylist=key_list)
                         if response['Deleted']:
-                            return response.json(0)
+                            return ResponseJSON(0)
             else:
-                return response.json(404)
-        return response.json(444)
+                return ResponseJSON(404)
+        return ResponseJSON(444)
 
-    def get_admin_update_stream(self, userID, request_dict,response):
+    def get_admin_update_stream(self, userID, request_dict):
         own_permission = ModelService.check_permission(userID=userID, permID=50)
         if own_permission is True:
             id = request_dict.get('id', None)
@@ -296,13 +294,13 @@ class StreamMedia(View):
             if param_flag is True:
                 is_update = Equipment_Stream.objects.filter(id=id).update(status=status)
                 if is_update:
-                    return response.json(0, {'id': id, 'status': status})
+                    return ResponseJSON(0, {'id': id, 'status': status})
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def get_admin_vod_url(self, userID, request_dict,response):
+    def get_admin_vod_url(self, userID, request_dict):
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
             uid = request_dict.get('uid', None)
@@ -311,13 +309,13 @@ class StreamMedia(View):
             if uid is not None and filename is not None and channel is not None:
                 s3 = S3ClassObject()
                 url = s3.get_generate_vod_url(uid + '_' + channel + '/' + filename)
-                return response.json(0, {'url': url})
+                return ResponseJSON(0, {'url': url})
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def get_admin_find_stream(self, userID, request_dict,response):
+    def get_admin_find_stream(self, userID, request_dict):
         own_permission = ModelService.check_permission(userID=userID, permID=20)
         if own_permission is True:
             content = request_dict.get('content', None)
@@ -331,17 +329,17 @@ class StreamMedia(View):
                 if equipment_stream_queryset.exists():
                     equipment_stream_count = equipment_stream_queryset.count()
                     equipment_stream_res = equipment_stream_queryset[(page - 1) * line:page * line]
-                    send_json = CommonService.qs_to_dict(equipment_stream_res)
+                    send_json = CommonService.query_set_to_dict(equipment_stream_res)
                     send_json['count'] = equipment_stream_count
-                    return response.json(0, send_json)
+                    return ResponseJSON(0, send_json)
                 else:
-                    return response.json(0)
+                    return ResponseJSON(0)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def get_all_server_json(self, userID,response):
+    def get_all_server_json(self, userID):
         own_permission = ModelService.check_permission(userID=userID, permID=20)
         if own_permission is True:
             url = NGINX_RTMP_STAT
@@ -349,11 +347,11 @@ class StreamMedia(View):
             xml_content = res.text
             xml_dict = xmltodict.parse(xml_content)
             if len(xml_dict):
-                return response.json(0, {'data': xml_dict})
+                return ResponseJSON(0, {'data': xml_dict})
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def get_admin_add_stream(self, token, userID, request_dict,response):
+    def get_admin_add_stream(self, token, userID, request_dict):
         channel = request_dict.get('channel', None)
         status = request_dict.get('status', None)
         uid = request_dict.get('uid', None)
@@ -363,31 +361,31 @@ class StreamMedia(View):
             if own_perm is True:
                 stream_queryset = Equipment_Stream.objects.filter(uid=uid, channel=channel)
                 if stream_queryset.exists():
-                    return response.json(174)
+                    return ResponseJSON(174)
                 try:
                     flag = Equipment_Stream.objects.create(userID=userID, status=status, uid=uid, channel=channel,
                                                            access_token=token)
                 except Exception as e:
                     errorInfo = traceback.format_exc()
                     print(errorInfo)
-                    return response.json(424, {'details': errorInfo})
+                    return ResponseJSON(424, {'details': errorInfo})
                 else:
                     if flag:
                         rtmp_url = RTMP_PUSH_URL
                         rtmp_name = uid + '_' + channel + '?userID=' + userID + '&uid=' + uid + '&channel=' + channel + '&access_token=' + token
-                        return response.json(0,
-                                            {'userID': userID, 'channel': channel,
-                                             'uid': uid,
-                                             'status': status,
-                                             'access_token': token,
-                                             'rtmp_url': rtmp_url,
-                                             'rtmp_name': rtmp_name})
+                        return ResponseJSON(0,
+                                                                         {'userID': userID, 'channel': channel,
+                                                                                   'uid': uid,
+                                                                                   'status': status,
+                                                                                   'access_token': token,
+                                                                                   'rtmp_url': rtmp_url,
+                                                                                   'rtmp_name': rtmp_name})
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
-    def get_admin_hls_vod(self, request_dict, userID,response):
+    def get_admin_hls_vod(self, request_dict, userID):
         own_permission = ModelService.check_permission(userID=userID, permID=30)
         if own_permission is True:
             uid = request_dict.get('uid', None)
@@ -409,15 +407,15 @@ class StreamMedia(View):
                 if res is True:
                     domain_prefix = 'http://d3596w5a6euckc.cloudfront.net/vod'
                     vod_url = domain_prefix + '/' + vod_key + '.m3u8'
-                    return response.json(0, {'vodurl': vod_url})
+                    return ResponseJSON(0, {'vodurl': vod_url})
                 else:
-                    return response.json(403)
+                    return ResponseJSON(403)
             else:
-                return response.json(444)
+                return ResponseJSON(444)
         else:
-            return response.json(404)
+            return ResponseJSON(404)
 
-    def get_vod_hls(self, request_dict,response):
+    def get_vod_hls(self, request_dict):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         filename = request_dict.get('filename', None)
@@ -442,11 +440,11 @@ class StreamMedia(View):
                                                      expires_at=expires_at,
                                                      private_key_file=os.path.join(BASE_DIR,
                                                                                    'Ansjer/file/pk-APKAINI6BNPKV54NHH7Q.pem'))
-                return response.json(0, {'vodurl': vod_url, 'vodCookie': vodCookie})
+                return ResponseJSON(0, {'vodurl': vod_url,'vodCookie': vodCookie})
             else:
-                return response.json(403)
+                return ResponseJSON(403)
         else:
-            return response.json(444)
+            return ResponseJSON(444)
 
 
 # 推流验证
@@ -484,14 +482,12 @@ def Auth_Live(request, *callback_args,
     if request.method == 'POST':
         request.encoding = 'utf-8'
         request_dict = request.POST
-    response = ResponseObject()
     token = request_dict.get('token', None)
     if token is not None:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
+        tokenManager = JSONTokenManager()
+        error_code = tokenManager.verify_AToken(token)
+        if error_code == 0:
+            userID = request_dict.get('userID', None)
             uid = request_dict.get('uid', None)
             channel = request_dict.get('channel', None)
             if userID is not None and uid is not None and channel is not None:
@@ -565,7 +561,7 @@ def send_video_s3(request, *callback_args,
                             subprocess.Popen(rm_common, shell=True)
         return HttpResponse(status=403)
     else:
-        return HttpResponse(404)
+        return ResponseJSON(444)
 
 
 @csrf_exempt
@@ -579,7 +575,7 @@ def push_flv_s3(request, *callback_args,
         request_dict = request.POST
     # 文件名
     basename = request_dict.get('basename', None)
-    response = ResponseObject()
+    # print(basename)
     if basename != None:
         base_path = 'tmp/flv/'
         file_base_path = base_path + basename
@@ -628,5 +624,5 @@ def push_flv_s3(request, *callback_args,
                             except Exception as e:
                                 print(repr(e))
                                 pass
-                        return response.json(code)
-    return response.json(444)
+                        return ResponseJSON(code)
+    return ResponseJSON(444)

+ 12 - 15
Controller/SysManage.py

@@ -12,16 +12,15 @@
 @Contact: chanjunkai@163.com
 """
 from django.views.decorators.csrf import csrf_exempt
+from Service.TokenManager import JSONTokenManager
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
-from Ansjer.settings import BASE_DIR
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-import os
+from Ansjer.config import *
+from Service.ResponseService import *
 
 
 @csrf_exempt
-def updateLog(request):
+def updateLog(request, *callback_args, **callback_kwargs):
     if request.method == 'GET':
         request.encoding = 'utf-8'
         request_dict = request.GET
@@ -30,14 +29,12 @@ def updateLog(request):
         request_dict = request.POST
     token = request_dict.get('token',None)
     content = request_dict.get('content',None)
-    response = ResponseObject()
     param_flag = CommonService.get_param_flag(data=[token,content])
     if param_flag is True:
-        tko = TokenObject(token)
-        tko.valid()
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID()
+        tokenManager = JSONTokenManager()
+        error_code = tokenManager.verify_AToken(token)
+        if error_code == 0:
+            userID = tokenManager.accessDict.get('userID', None)
             own_permission = ModelService.check_permission(userID=userID,permID=50)
             if own_permission is True:
                 file_path = os.path.join(BASE_DIR,'static/Help/version.txt')
@@ -46,11 +43,11 @@ def updateLog(request):
                         f.write(content)
                 except Exception as e:
                     pass
-                return response.json(0)
+                return ResponseJSON(0)
             else:
-                return response.json(404)
+                return ResponseJSON(404)
         else:
-            return response.json(tko.code)
+            return HttpResponse(tokenManager.errorCodeInfo(error_code))
     else:
-        return response.json(444)
+        return ResponseJSON(444)
 

+ 10 - 18
Controller/Test.py

@@ -15,20 +15,19 @@ from django.views.generic.base import View
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 # from Ansjer.settings import *
+from Service.TokenManager import *
 from django.contrib import auth
 from django.http import HttpResponseRedirect
 '''
 http://192.168.136.40:8077/Test
 '''
 import json
+from Service.ResponseService import *
 import requests
 from Service.ModelService import ModelService
 from django.middleware.csrf import get_token
 from django.http import JsonResponse
 from ratelimit.decorators import ratelimit
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-
 
 class Test(View):
     '''
@@ -46,32 +45,25 @@ class Test(View):
     @ratelimit(key='ip', rate='1/m')
     # 查询
     def get(self, request, *args, **kwargs):
-        response = ResponseObject()
-
-        return response.json(0)
+        return ResponseJSON(0)
 
     # 增加
     def post(self, request, *args, **kwargs):
-        response = ResponseObject()
-        return response.json(0)
+
+
+        return ResponseJSON(0, {'test': 123})
 
     # 修改 资源改变
     def put(self, request):
-        response = ResponseObject()
-        return response.json(0)
+        return ResponseJSON(404)
 
     # 修改 属性改变
     def PATCH(self, request):
-        response = ResponseObject()
-        return response.json(0)
+        return ResponseJSON(404)
 
     # 删除
     def delete(self, request):
-        response = ResponseObject()
-
-        return response.json(0)
+        return ResponseJSON(404)
 
     def validation(self, request_dict, *args, **kwargs):
-        response = ResponseObject()
-
-        return response.json(0)
+        return ResponseJSON(404)

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 747 - 145
Controller/UserManger.py


+ 121 - 114
Controller/shareUserPermission.py

@@ -2,14 +2,16 @@
 # -*- coding: utf-8 -*-
 from django.core import serializers
 import traceback, simplejson as json
+from django.shortcuts import HttpResponse
 from django.views.generic.base import View
 from django.core.exceptions import FieldError
 from django.views.decorators.csrf import csrf_exempt
 from django.utils.decorators import method_decorator
+from Service.TokenManager import JSONTokenManager
 from Model.models import Device_User, Device_Info, Role
 from Service.CommonService import CommonService
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
+from Service.ResponseService import *
+
 
 
 class searchUserView(View):
@@ -27,7 +29,7 @@ class searchUserView(View):
         fieldDict = request.GET
         return self.searchUser(fieldDict, args, kwargs)
 
-    def searchUserSQL(self, fieldDict, response, *args, **kwargs):
+    def searchUserSQL(self, fieldDict, *args, **kwargs):
         exact = fieldDict.get('exact', True)
         if exact == '0' or exact == 'False':
             exact = False
@@ -36,30 +38,31 @@ class searchUserView(View):
 
         if 'exact' in fieldDict.keys():
             fieldDict.pop('exact')
+
         try:
-            if exact == 'True' or exact == 1:
+            if  exact == 'True' or exact == 1:
                 User = Device_User.objects.filter(**fieldDict).order_by('-data_joined')
             elif exact == 'False' or exact == 0:
                 if 'username' in fieldDict.keys():
-                    User = Device_User.objects.filter(username=fieldDict.get('username',
-                                                                             None)).order_by('-data_joined')
+                    User = Device_User.objects.filter(username = fieldDict.get('username',
+                                                                                           None)).order_by('-data_joined')
                 elif 'userEmail' in fieldDict.keys():
-                    User = Device_User.objects.filter(userEmail=fieldDict.get('userEmail',
-                                                                              None)).order_by('-data_joined')
+                    User = Device_User.objects.filter(userEmail = fieldDict.get('userEmail',
+                                                                                           None)).order_by('-data_joined')
                 elif 'userID' in fieldDict.keys():
-                    User = Device_User.objects.filter(userID=fieldDict.get('userID',
-                                                                           None)).order_by('-data_joined')
+                    User = Device_User.objects.filter(userID = fieldDict.get('userID',
+                                                                                           None)).order_by('-data_joined')
                 else:
                     User = Device_User.objects.filter(**fieldDict).order_by('-data_joined')
             else:
                 User = Device_User.objects.filter(**fieldDict).order_by('-data_joined')
 
         except FieldError:
-            return response.json(502)
+            return ResponseFormal(502)
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('查询数据库错误: %s' % errorInfo)
-            return response.json(500, {'details': repr(e)})
+            return ResponseFormal(500,{'details':repr(e)})
         else:
             if User:
                 ddUser = User[0].device_info_set.all()
@@ -68,30 +71,32 @@ class searchUserView(View):
                 if ddUser:
                     sqlJSON1 = serializers.serialize('json', ddUser)
                     sqlList1 = json.loads(sqlJSON1)
-                    device_Info_dict = {}
-                    device_Info_list = []
+                    device_Info_dict={}
+                    device_Info_list=[]
                     for eachJson1 in sqlList1:
-                        device_Info_dict['primaryUserID'] = eachJson1['fields']['primaryUserID']
-                        device_Info_dict['Type'] = eachJson1['fields']['Type']
-                        device_Info_dict['UID'] = eachJson1['fields']['UID']
-                        device_Info_dict['pk'] = eachJson1['pk']
-                        device_Info_dict['NickName'] = eachJson1['fields']['NickName']
-                        device_Info_dict['View_Password'] = eachJson1['fields']['View_Password']
-                        device_Info_dict['View_Account'] = eachJson1['fields']['View_Account']
-                        device_Info_dict['Online'] = eachJson1['fields']['Online']
-                        device_Info_dict['EventNotification'] = eachJson1['fields']['EventNotification']
-                        device_Info_dict['ChannelIndex'] = eachJson1['fields']['ChannelIndex']
-                        device_Info_dict['EventNotification'] = eachJson1['fields']['EventNotification']
-                        device_Info_dict['NotificationMode'] = eachJson1['fields']['NotificationMode']
+                        device_Info_dict['primaryUserID']=eachJson1['fields']['primaryUserID']
+                        device_Info_dict['Type']=eachJson1['fields']['Type']
+                        device_Info_dict['UID']=eachJson1['fields']['UID']
+                        device_Info_dict['pk']=eachJson1['pk']
+                        device_Info_dict['NickName']=eachJson1['fields']['NickName']
+                        device_Info_dict['View_Password']=eachJson1['fields']['View_Password']
+                        device_Info_dict['View_Account']=eachJson1['fields']['View_Account']
+                        device_Info_dict['Online']=eachJson1['fields']['Online']
+                        device_Info_dict['EventNotification']=eachJson1['fields']['EventNotification']
+                        device_Info_dict['ChannelIndex']=eachJson1['fields']['ChannelIndex']
+                        device_Info_dict['EventNotification']=eachJson1['fields']['EventNotification']
+                        device_Info_dict['NotificationMode']=eachJson1['fields']['NotificationMode']
+
                         device_Info_list.append(device_Info_dict)
-                        device_Info_dict = {}
+                        device_Info_dict={}
                     sqlList[0]['device_info'] = device_Info_list
                 sqlDict = dict(zip(["datas"], [sqlList]))
-                return response.json(0, sqlDict)
+                return ResponseFormal(0, sqlDict)
             else:
-                return response.json(102)
-
-    def searchUserPCSQL(self, fieldDict, response):
+                # 发送邮件
+                # sms()
+                return ResponseFormal(102)
+    def searchUserPCSQL(self, fieldDict):
         try:
             page = int(fieldDict['page'])
             line = int(fieldDict['line'])
@@ -99,56 +104,57 @@ class searchUserView(View):
             fieldDict.pop('line')
             fieldDict.pop('type')
             if len(fieldDict) > 0:
-                searchCondition = CommonService.get_kwargs(data=fieldDict)
+                searchCondition=CommonService.get_kwargs(data=fieldDict)
                 device_user_queryset = Device_User.objects.filter(**searchCondition).order_by('-data_joined')
             else:
                 device_user_queryset = Device_User.objects.all().order_by('-data_joined')
         except FieldError:
-            return response.json(502)
+            return ResponseFormal(502)
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('查询数据库错误: %s' % errorInfo)
-            return response.json(500, {"details": repr(e)})
+            return ResponseFormal(500, {"details": repr(e)})
         else:
             if device_user_queryset:
                 device_user_count = device_user_queryset.count()
-                device_user_res = device_user_queryset[(page - 1) * line:page * line]
-                sqlDict = CommonService.qs_to_dict(device_user_res)
+                device_user_res=device_user_queryset[(page-1)*line:page*line]
+                sqlDict = CommonService.query_set_to_dict(device_user_res)
                 for k, v in enumerate(sqlDict["datas"]):
                     for val in device_user_res:
-                        if v['pk'] == val.userID:
-                            device_info_query_set = val.device_info_set.all()
-                            device_info_list = CommonService.qs_to_dict(device_info_query_set)
+                        if v['pk']==val.userID:
+                            device_info_query_set=val.device_info_set.all()
+                            device_info_list = CommonService.query_set_to_dict(device_info_query_set)
                             # device_user关联到device_info
-                            sqlDict["datas"][k]['device_info'] = device_info_list
-                    if len(v['fields']['role']) > 0:
-                        role_query_set = Role.objects.get(rid=v['fields']['role'][0])
+                            sqlDict["datas"][k]['device_info']=device_info_list
+                    if len(v['fields']['role'])>0:
+                        role_query_set=Role.objects.get(rid=v['fields']['role'][0])
                         sqlDict["datas"][k]['fields']['role'].append(role_query_set.roleName)
                 sqlDict['count'] = device_user_count
-                return response.json(0, sqlDict)
+                return ResponseFormal(0,sqlDict)
             else:
-                return response.json(0, {"datas": ""})
-
+                return ResponseFormal(0,{"datas":""})
     def searchUser(self, fieldDict, *args, **kwargs):
-        response = ResponseObject()
-        token = fieldDict.get('token', None)
-        if token != None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                fieldDict = fieldDict.dict()
-                fieldDict.pop('token')
-                type = fieldDict.get('type', None)
-                if type == 'PC':
-                    return self.searchUserPCSQL(fieldDict, response)
+        if fieldDict != None:
+            token = fieldDict.get('token', None)
+            if token != None:
+                tokenManager = JSONTokenManager()
+                error_code = tokenManager.verify_AToken(token)
+                if error_code == 0:
+                    fieldDict = fieldDict.dict()
+                    fieldDict.pop('token')
+                    type = fieldDict.get('type',None)
+                    if type == 'PC':
+                        response = HttpResponse(self.searchUserPCSQL(fieldDict))
+                    else:
+                        response = HttpResponse(self.searchUserSQL(fieldDict, args, kwargs))
+                    return response
                 else:
-                    return self.searchUserSQL(fieldDict, response, args, kwargs)
+                    response = HttpResponse(tokenManager.errorCodeInfo(error_code))
+                    return response
             else:
-                return response.json(tko.code)
+                return ResponseJSON(444)
         else:
-            return response.json(444)
-
+            return ResponseJSON(444)
 
 class shareUserEquipmentView(View):
     @method_decorator(csrf_exempt)
@@ -180,32 +186,34 @@ class shareUserEquipmentView(View):
                 sharedAll = 1
             else:
                 sharedAll = 0
-        response = ResponseObject()
+
         if token != None and GuestID != None:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                MasterID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                MasterID = tokenManager.accessDict.get('userID', None)
                 if sharedAll and MasterID != None:
-                    return self.shareUserSQL(MasterID, GuestID, True, response, args, kwargs)
+                    response = HttpResponse(self.shareUserSQL(MasterID, GuestID, True, args, kwargs))
+                    return response
                 if content != None and MasterID != None:
-                    return self.shareUserSQL(MasterID, GuestID, False, response, args, content=content)
+                    response = HttpResponse(self.shareUserSQL(MasterID, GuestID, False, args, content=content))
+                    return response
                 else:
-                    return response.json(804)
+                    return ResponseJSON(804)
             else:
-                return response.json(tko.code)
+                response = HttpResponse(tokenManager.errorCodeInfo(error_code))
+                return response
         else:
-            return response.json(800)
+            return ResponseJSON(800)
 
-    def shareUserSQL(self, MasterID, GuestID, sharedAll, response, *args, **kwargs):
+    def shareUserSQL(self, MasterID, GuestID, sharedAll, *args, **kwargs):
         try:
-            Guest = Device_User.objects.filter(userID=GuestID).order_by('-data_joined')
-            Master = Device_Info.objects.filter(userID_id=MasterID).order_by('-data_joined')
+            Guest = Device_User.objects.filter(userID = GuestID).order_by('-data_joined')
+            Master = Device_Info.objects.filter(userID_id = MasterID).order_by('-data_joined')
         except Exception as e:
             errorInfo = traceback.format_exc()
             print('查询数据库错误: %s' % errorInfo)
-            return response.json(500, {"details": repr(e)})
+            return ResponseFormal(500, {"details": repr(e)})
         else:
             if Master:
                 if Guest:
@@ -254,47 +262,46 @@ class shareUserEquipmentView(View):
 
                     if len(querysetList) == 0:
                         if sharedAll:
-                            return response.json(160)
+                            return ResponseFormal(160)
                         else:
                             if len(UID) > 0:
-                                return response.json(160, {'error_UID': UID})
+                                return ResponseFormal(160,{'error_UID': UID})
                             else:
-                                return response.json(160)
+                                return ResponseFormal(160)
                     else:
                         try:
                             equipmentCount = Device_Info.objects.bulk_create(querysetList)
                         except Exception as e:
                             errorInfo = traceback.format_exc()
                             print('添加数据库记录错误: %s' % errorInfo)
-                            return response.json(500, {"details": repr(e)})
+                            return ResponseFormal(500, {"details": repr(e)})
                         else:
                             if dictLen > 0:
-                                return response.json(0, {
-                                    'Shared': dictLen,
-                                    'Sharing': len(querysetList),
-                                    'errormsg': u'A part of the equipment has been shared!',
-                                })
+                                return ResponseFormal(0, {
+                                            'Shared': dictLen,
+                                            'Sharing': len(querysetList),
+                                            'errormsg': u'A part of the equipment has been shared!',
+                                        })
                             else:
                                 if sharedAll:
-                                    return response.json(0, {
+                                    return ResponseFormal(0, {
                                         'Sharing': len(querysetList)
                                     })
                                 else:
                                     if len(UID) > 0:
-                                        return response.json(0, {
+                                        return ResponseFormal(0, {
                                             'error_UID': UID,
                                             'Sharing': len(querysetList),
                                         })
                                     else:
-                                        return response.json(0, {
+                                        return ResponseFormal(0, {
                                             'Sharing': len(querysetList),
                                         })
                 else:
-                    return response.json(113)
+                    return ResponseFormal(113)
 
             else:
-                return response.json(172)
-
+                return ResponseFormal(172)
 
 class unsharedUserEquipmentView(View):
     @method_decorator(csrf_exempt)
@@ -319,8 +326,6 @@ class unsharedUserEquipmentView(View):
         content = queryset.get('content', None)
         unsharedAll = queryset.get('unsharedAll', False)
 
-        response = ResponseObject()
-
         if unsharedAll in ('1', '0'):
             unsharedAll = bool(int(unsharedAll))
         elif unsharedAll in ('true', 'false'):
@@ -330,34 +335,36 @@ class unsharedUserEquipmentView(View):
                 unsharedAll = 0
 
         if token != None and GuestID != None and len(GuestID) > 0:
-            tko = TokenObject(token)
-            tko.valid()
-            response.lang = tko.lang
-            if tko.code == 0:
-                MasterID = tko.userID()
+            tokenManager = JSONTokenManager()
+            error_code = tokenManager.verify_AToken(token)
+            if error_code == 0:
+                MasterID = tokenManager.accessDict.get('userID', None)
                 if unsharedAll and MasterID != None:
-                    return self.unsharedUserEquipmentSQL(MasterID, GuestID, True, response, args, kwargs)
+                    response = HttpResponse(self.unsharedUserEquipmentSQL(MasterID, GuestID, True, args, kwargs))
+                    return response
                 else:
                     if content != None and MasterID != None:
-                        return self.unsharedUserEquipmentSQL(MasterID, GuestID, False, response, args, content=content)
+                        response = HttpResponse(self.unsharedUserEquipmentSQL(MasterID, GuestID, False, args, content=content))
+                        return response
                     else:
-                        return response.json(805)
+                        return ResponseJSON(805)
 
             else:
-                return response.json(tko.code)
+                response = HttpResponse(tokenManager.errorCodeInfo(error_code))
+                return response
         else:
-            return response.json(800)
+            return ResponseJSON(800)
 
-    def unsharedUserEquipmentSQL(self, MasterID, GuestID, unsharedAll, response, *args, **kwargs):
+    def unsharedUserEquipmentSQL(self, MasterID, GuestID, unsharedAll, *args, **kwargs):
         if unsharedAll:
             try:
                 equipmentCount = Device_Info.objects.filter(userID_id=GuestID, primaryUserID=MasterID).delete()
             except Exception as e:
                 errorInfo = traceback.format_exc()
                 print('删除设备更新数据库错误: %s' % errorInfo)
-                return response.json(171, {"details": repr(e)})
+                return ResponseFormal(171, {"details": repr(e)})
             else:
-                return response.json(0, {'removeCount': equipmentCount[0]})
+                return ResponseFormal(0, {'removeCount': equipmentCount[0]})
         else:
             content = kwargs.get('content', None)
             if content != None:
@@ -387,17 +394,17 @@ class unsharedUserEquipmentView(View):
                         removeCount += equipmentCount[0]
 
                 if len(errorRemove) > 0:
-                    return response.json(171, {
-                        'removeCount': removeCount,
-                        'error_UID': errorRemove,
-                    })
+                    return ResponseFormal(171, {
+                                'removeCount': removeCount,
+                                'error_UID': errorRemove,
+                            })
                 else:
-                    if len(errorUID) > 0:
-                        return response.json(173, {
+                    if len(errorUID) >0:
+                        return ResponseFormal(173, {
                             'removeCount': removeCount,
                             'error_UID': errorUID,
                         })
                     else:
-                        return response.json(0, {
-                            'removeCount': removeCount
+                        return ResponseFormal(0, {
+                                     'removeCount': removeCount
                         })

+ 15 - 3
DB/data.json

@@ -1,5 +1,17 @@
 {
-  "code": "200",
-  "res": {},
-  "msg":{}
+  "token": "",
+  "content": {
+    "View_Account": "admin",
+    "UID": "9M23R17PHD8TJDT8111A",
+    "NotificationMode": 1,
+    "EventNotification": 0,
+    "DebugMode": 0,
+    "NickName": "\ud83c\udf3a",
+    "qvgaLevel": 0,
+    "mMonitorIndex": 0,
+    "View_Password": "541034aaa",
+    "Online": 0,
+    "Type": 10,
+    "ChannelIndex": 0
+  }
 }

+ 70 - 18
Model/models.py

@@ -1,16 +1,13 @@
-from itertools import chain
-
-from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
 from django.db import models
+from itertools import chain
 from django.utils import six
-from django.utils.encoding import python_2_unicode_compatible
-from imagekit.models import ProcessedImageField
 from imagekit.processors import ResizeToFill
-
-from Ansjer.config import SERVER_DOMAIN
+from imagekit.models import ProcessedImageField
+import Ansjer.settings as api_settings
+from django.utils.encoding import python_2_unicode_compatible
+from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
 from Service.CommonService import CommonService
 
-
 class PermissionsManager(models.Manager):
     use_in_migrations = True
 
@@ -165,7 +162,7 @@ class Device_User(AbstractBaseUser):
                         verbose_name=u'头像',
                         # 图片将处理成85x85的尺寸
                         processors=[ResizeToFill(85, 85)],)
-    userIconUrl = models.URLField(blank = True, max_length = 128, default=SERVER_DOMAIN
+    userIconUrl = models.URLField(blank = True, max_length = 128, default=api_settings.SERVER_DOMAIN
                                                                           + '/account/getAvatar/User/defaultUser.png')
     NickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'用户昵称')
     is_superuser = models.IntegerField(blank=True, default=0, verbose_name=u'用户类型')
@@ -279,14 +276,42 @@ class Device_User(AbstractBaseUser):
             return permslist
     def has_module_perms(self, app_label):
         return True
+    '''
+
+    def toJSON(self, fields=None, exclude=None):
+        Fields = []
+        for field in self._meta.fields:
+            Fields.append(field.name)
+
+        data = {}
+        for attr in Fields:
+            if fields and attr not in fields:
+                continue
+            if exclude and attr in exclude:
+                continue
+
+            if isinstance(getattr(self, attr), datetime.datetime):
+                data[attr] = getattr(self, attr).strftime('%Y-%m-%d %H:%M:%S')
+            elif isinstance(getattr(self, attr), datetime.date):
+                data[attr] = getattr(self, attr).strftime('%Y-%m-%d')
+            elif isinstance(getattr(self, attr), ProcessedImageFieldFile):
+                data[attr] = str(getattr(self, attr))
+            else:
+                data[attr] = getattr(self, attr)
+
+        import simplejson as json
+        return json.dumps(data, ensure_ascii=False)
+    '''
     @property
     def is_staff(self):
         return self.is_superuser
 
 class Device_Info(models.Model):
     id = models.CharField(blank=True, max_length=32, primary_key=True)
+    # to_field 指定当前关系与被关联对象中的哪个字段关联。默认情况下,to_field 指向被关联对象的主键
     userID = models.ForeignKey(Device_User, blank=True, to_field='userID',
                                    on_delete=models.CASCADE)
+
     NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
     UID = models.CharField(blank=True, max_length=32, verbose_name=u'设备UID')
     SID = models.CharField(blank=True, max_length=32, verbose_name=u'服务器ID')
@@ -316,6 +341,32 @@ class Device_Info(models.Model):
 
     def __str__(self):
         return self.NickName
+    '''
+    def toJSON(self, fields=None, exclude=None):
+        Fields = []
+        for field in self._meta.fields:
+            Fields.append(field.name)
+
+        data = {}
+        for attr in Fields:
+            if fields and attr not in fields:
+                continue
+            if exclude and attr in exclude:
+                continue
+
+            if isinstance(getattr(self, attr), datetime.datetime):
+                data[attr] = getattr(self, attr).strftime('%Y-%m-%d %H:%M:%S')
+            elif isinstance(getattr(self, attr), datetime.date):
+                data[attr] = getattr(self, attr).strftime('%Y-%m-%d')
+            elif isinstance(getattr(self, attr), Device_User):
+                data[attr] = getattr(self, attr).userID
+            else:
+                data[attr] = getattr(self, attr)
+
+        import simplejson as json
+        return json.dumps(data,ensure_ascii=False)
+    
+    '''
     def model_to_dict(self, fields=None, exclude=None):
         opts = self._meta
         data = {}
@@ -391,7 +442,7 @@ class Auth_Captcha(models.Model):
 class Access_Log(models.Model):
     id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
     user = models.CharField(max_length=100,null=True,blank=True,verbose_name=u'用户')
-    operation = models.CharField(max_length=100,db_index=True,null=True,blank=True,verbose_name=u'操作')
+    operation = models.CharField(max_length=100,null=True,blank=True,verbose_name=u'操作')
     ip = models.CharField(max_length=100,null=True,blank=True,verbose_name=u'访问ip地址')
     url = models.CharField(max_length=150,null=True,blank=True,verbose_name=u'访问路径')
     status = models.IntegerField(null=True,blank=True,verbose_name=u'状态')
@@ -440,7 +491,7 @@ class Equipment_Sensor(models.Model):
 class Equipment_Info(models.Model):
     id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
     devUid = models.CharField(null=True, blank=True,max_length=32, verbose_name=u'设备ID')
-    devNickName = models.CharField(blank=True, max_length=32, default='',verbose_name=u'设备昵称')
+    devNickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
     Channel = models.IntegerField(null=True, blank=True, verbose_name=u'设备通道')
     eventType = models.IntegerField(null=True, blank=True, verbose_name=u'事件类型')
     viewAccont = models.CharField(blank=True,null=True, max_length=32, verbose_name=u'设备账户')
@@ -449,8 +500,7 @@ class Equipment_Info(models.Model):
     alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
     eventTime = models.CharField(blank=True,null=True, max_length=16, verbose_name=u'设备报警时间')
     receiveTime = models.CharField(blank=True,null=True, max_length=16, verbose_name=u'接收到报警时间')
-    userID = models.ForeignKey(Device_User, null=True,blank=True, to_field='userID',
-                                   on_delete=models.CASCADE)
+
     def __str__(self):
         return self.id
 
@@ -458,7 +508,7 @@ class Equipment_Info(models.Model):
         db_table = 'equipment_info'
         verbose_name = u'设备信息推送表'
         verbose_name_plural=verbose_name
-        ordering = ('-id',)
+        ordering = ('id',)
 
 class Feedback_Info(models.Model):
     id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
@@ -540,8 +590,9 @@ class Equipment_Version(models.Model):
         ordering = ('-data_joined',)
         db_table = 'equipment_version'
 
-class App_Info(models.Model):
 
+class App_Info(models.Model):
+    
     id = models.AutoField(primary_key=True,verbose_name=u'自增标记ID')
     appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
     appName = models.CharField(blank=True, max_length=32, verbose_name=u'app名称')
@@ -564,13 +615,13 @@ class App_Info(models.Model):
         verbose_name_plural=verbose_name
         ordering = ('id',)
 
+
+'''
 class oauth_user(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     oid = models.CharField(max_length=36,unique=True,null=True,blank=True)
     userID = models.OneToOneField("Device_User",verbose_name="用户表userID",to_field='userID',on_delete=models.CASCADE)
-    add_time = models.DateTimeField(blank=True,null=True, verbose_name=u'加入时间', auto_now_add=True)
-    update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
-
+    
     def __str__(self):
         return self.oid
 
@@ -579,3 +630,4 @@ class oauth_user(models.Model):
         verbose_name = u'认证用户关联表'
         verbose_name_plural=verbose_name
         ordering = ('id',)
+'''

+ 1 - 1
Object/AWS/SesClassObject.py

@@ -1,4 +1,4 @@
-from Ansjer.config import AWS_ACCESS_ID,AWS_ACCESS_SECRET,AWS_ACCESS_REGION,COMPANY_EMAIL
+from Ansjer.config import *
 from boto3.session import Session
 import traceback
 

+ 45 - 0
README.md

@@ -0,0 +1,45 @@
+### 软件版本:V1.0.3.218-7-23
+更新内容:
+    1.增加报警推送信息
+    2.增加设备操作日志
+    3.设备昵称支持emoji
+    4.支持多设备多终端进行登录
+    5.更改邮件发送为亚马逊aws
+    6.修改邮件模板,发件人
+    7.设备第一次添加为绑定人(其他人只能通过解绑,或者分享,或者通过密码添加获得,暂时未更新到正式)
+    8.增加操作文档
+    9.增加p2p定时发送邮件脚本
+### 软件版本:V1.0.1.218-5-15  
+更新内容:
+超级管理员账号:
+    1.用户管理下的反馈问题界面(分页,显示,编辑,删除),排序功能(反馈时间排序,状态排序,更新时间排序)     
+	2.版本管理下的APP界面(分页,显示,编辑,删除,添加,重置) 
+	3.帮助管理下的访问日志界面(分页,显示),搜索功能(用户名搜索,ip地址搜索,访问状态搜索,访问路径搜索,访问参数搜索)排序功能(时间排序) 
+	4.用户管理下的用户信息(显示,分页),要求用安卓APP与IOS测试注册的功能。注意:(尽量进行极限测试,比如国外手机是否有非11位的,邮箱长度是否有50位以上的) 
+	管理员账号: 
+	1.用户管理下的反馈问题界面(分页,显示),排序功能(反馈时间排序,状态排序,更新时间排序) 
+	2.版本管理下的APP界面(分页,显示)  
+	3.帮助管理下的访问日志界面(分页,显示),搜索功能(用户名搜索,ip地址搜索,访问状态搜索,访问路径搜索,访问参数搜索)  排序功能(时间排序) 
+	版本上传管理员: 
+	1.没有该功能 
+### 软件版本:V1.0.0.2018-4-23
+更新内容: 
+	超级管理员账号:         
+	1.登录功能,权限,角色添加,权限控制功能          
+	2.用户列表添加,删除,编辑(是否激活),显示功能,分页功能 
+	3.设备列表搜索(设备名称搜索),显示,传感器功能(修改,删除,显示的操作)         
+	4.版本列表上传版本,添加版本的信息,显示功能 
+	5.帮助管理的更新日志显示,数据统计显示,分页功能        
+	6.导航栏的全屏,修改密码,退出登录功能,显示账户资料,编辑用户的邮箱,昵称,是否在线      
+	管理员账号:         
+	1.登录功能          
+	2.用户列表显示功能        
+	3.设备列表搜索(设备名称搜索),显示功能,分页功能          
+	4.版本列表上传版本显示功能  
+	5.帮助管理的更新日志显示,数据统计显示,分页功能         
+	6.导航栏的全屏,显示账户资料,编辑用户的邮箱,昵称,是否在线,修改密码,退出登录功能 
+	版本上传管理员: 
+	1.登录功能   
+	2.版本列表上传版本,添加版本信息功能  
+	3.帮助管理的更新日志显示,数据统计显示,分页功能 
+	4.导航栏的全屏,修改密码,退出登录功能,显示账户资料,编辑用户的邮箱,昵称,是否在线

+ 2 - 31
Service/CommonService.py

@@ -7,9 +7,7 @@ from pathlib import Path
 from django.utils import timezone
 from Ansjer.settings import SERVER_HOST
 from django_global_request.middleware import get_request
-from Ansjer.settings import BASE_DIR
-from random import Random
-
+from Ansjer.config import BASE_DIR
 
 # 复用性且公用较高封装代码在这
 class CommonService:
@@ -38,7 +36,7 @@ class CommonService:
     # 定义静态方法
     # 格式化query_set转dict
     @staticmethod
-    def qs_to_dict(query_set):
+    def query_set_to_dict(query_set):
         sqlJSON = serializers.serialize('json', query_set)
         sqlList = json.loads(sqlJSON)
         sqlDict = dict(zip(["datas"], [sqlList]))
@@ -249,30 +247,3 @@ class CommonService:
             return None
         else:
             return userID
-
-    @staticmethod
-    def req_path(request, ssl=False):
-        get_host = request.get_host()  # 获取请求地址
-        if ssl is True:
-            tran_p = "https://"
-        else:
-            tran_p = "http://"
-        url_all = tran_p + get_host
-        return url_all
-
-    # 生成随机数
-    @staticmethod
-    def RandomStr(randomlength=8, number=True):
-        str = ''
-        if number == False:
-            characterSet = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsT' \
-                           'tUuVvWwXxYyZz0123456789'
-        else:
-            characterSet = '0123456789'
-
-        length = len(characterSet) - 1
-
-        random = Random()
-        for index in range(randomlength):
-            str += characterSet[random.randint(0, length)]
-        return str

+ 32 - 27
Service/MiscellService.py

@@ -1,22 +1,18 @@
-import datetime
-import time
-import traceback
-
-import requests
-import simplejson as json
-from django.utils.timezone import utc
-
-from Ansjer.config import SERVER_DOMAIN
-from Ansjer.settings import SECRET_KEY
-from Controller.CheckUserData import getRandom, TokenLink
 from Object.AWS.SesClassObject import SesClassObject
-from Object.TokenObject import TokenObject
-from Object.mongodb import mongodb
+from Ansjer.settings import SERVER_DOMAIN
+from Ansjer.config import SECRET_KEY
 from Service.CommonService import CommonService
+import time, traceback
+from Controller.CheckUserData import getRandom, TokenLink
+import simplejson as json
+from Service.TokenManager import JSONTokenManager
 from Service.ModelService import ModelService
+import datetime
+from django.utils.timezone import utc
+import requests
+from Object.mongodb import mongodb
 from Service.TemplateService import TemplateService
-
-
+from Model.models import Device_User
 # 杂项类,共用行不高,但有些地方需求
 
 
@@ -65,28 +61,37 @@ class MiscellService():
 
     # 获取访问用户名称
     @staticmethod
-    def get_access_name(request_dict):
+    def get_access_name(request):
+        if request.method == 'GET':
+            request_dict = request.GET
+        if request.method == 'POST':
+            request_dict = request.POST
         token = request_dict.get('token', None)
-        user = None
-        if token is not None:
-            tko = TokenObject(token)
-            tko.valid()
-            if tko.code == 0:
-                userID = ModelService.get_userID_by_oid(tko.oid)
-                user = ModelService.get_user_name(userID)
-        return user
+        userName = request_dict.get('userName', None)
+        userEmail = request_dict.get('userEmail', None)
+        if userName is not None:
+            return userName
+        elif userEmail is not None:
+            return userEmail
+        elif token is not None:
+            tM = JSONTokenManager()
+            tM.verify_AToken(token)
+            userID = tM.accessDict.get('userID', None)
+            username = ModelService.get_user_name(userID=userID)
+            return username
+        else:
+            return None
 
     @staticmethod
     def add_access_log(request, status_code):
-        request.encoding = 'utf-8'
         if request.method == 'GET':
             request_dict = request.GET
         if request.method == 'POST':
+            # request.encoding = 'utf-8'
             request_dict = request.POST
         api_list = TemplateService.log_api()
         request_path = request.path.strip().strip('/')
         if request_path in api_list:
-            user = MiscellService.get_access_name(request_dict=request_dict)
             clientIP = CommonService.get_ip_address(request)
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             password = request_dict.get('userPwd', None)
@@ -95,7 +100,7 @@ class MiscellService():
                 request_dict.pop('userPwd')
             content = json.dumps(request_dict)
             add_data = {
-                'user': user,
+                'user': MiscellService.get_access_name(request=request),
                 'ip': clientIP,
                 'status': status_code,
                 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,

+ 4 - 13
Service/ModelService.py

@@ -14,7 +14,7 @@ class ModelService:
     def getValidateMember(userID):
         device_user_query_set = Device_User.objects.get(userID=userID)
         role_query_set = device_user_query_set.role.all()
-        role_dict = CommonService.qs_to_dict(role_query_set)
+        role_dict = CommonService.query_set_to_dict(role_query_set)
         permission = role_dict["datas"][0]["fields"]["permission"]
         if len(permission):
             if 92 in permission:
@@ -27,7 +27,7 @@ class ModelService:
         device_user_query_set = Device_User.objects.get(userID=userID)
         role_query_set = device_user_query_set.role.all()
         if role_query_set.exists():
-            role_dict = CommonService.qs_to_dict(role_query_set)
+            role_dict = CommonService.query_set_to_dict(role_query_set)
             permission = role_dict["datas"][0]["fields"]["permission"]
             if len(permission):
                 return permission
@@ -50,7 +50,7 @@ class ModelService:
             if device_user_query_set:
                 role_query_set = device_user_query_set.role.all()
                 if role_query_set:
-                    role_dict = CommonService.qs_to_dict(role_query_set)
+                    role_dict = CommonService.query_set_to_dict(role_query_set)
                     permission = role_dict["datas"][0]["fields"]["permission"]
                     print(permission)
                     if len(permission) > 0:
@@ -123,13 +123,4 @@ class ModelService:
                                                           View_Password=View_Password, ChannelIndex=ChannelIndex)
         if device_info_queryset.exists():
             return True
-        return False
-
-    # 根据oid获取userID
-    @staticmethod
-    def get_userID_by_oid(oid):
-        if oid is not None:
-            oauth_user_qs = oauth_user.objects.filter(oid=oid)
-            if oauth_user_qs.exists():
-                return oauth_user_qs[0].userID.userID
-        return None
+        return False

+ 338 - 0
Service/ResponseService.py

@@ -0,0 +1,338 @@
+from django.shortcuts import HttpResponse
+import simplejson as json
+from Service.CommonService import CommonService
+from Model.models import Device_User
+from var_dump import var_dump
+
+
+def ResponseData(code, res={},*args, **kwargs):
+    token = CommonService.get_request_val('token')
+    language = kwargs.get('language', None)
+    if language is not None:
+        LANGUAGE = language
+    else:
+        LANGUAGE = 'en'
+    if token is not None:
+        # var_dump(token)
+        userID = CommonService.get_userID_byT(token)
+
+        if userID is not None:
+            dn = Device_User.objects.filter(userID=userID).values('language')
+            if dn.exists():
+                if dn[0]['language']:
+                    LANGUAGE = dn[0]['language']
+    data_en = {
+        0: 'Success',
+        4: 'Operation failed',
+        5: 'Please try again one minute later!',
+        10: res,
+        13: 'This device does not exist !',
+        14: 'This device does not belong to the user',
+        15: 'You have not opened this service',
+        44: 'System error! Can not send email',
+        48: 'System object error!',
+        54: 'Data is already exist!',
+        55: 'Data is not exist!',
+        60: 'The app info has already exist',
+        89: 'You have already obtained the verification code, please check it or get it again after 5 minutes.',
+        90: 'If you have too many times to log in, please try it in 10 seconds.',
+        101: 'The user account of the mobile phone has already existed!',
+        102: 'The user account of the mobile phone does not exist!',
+        103: 'The mailbox user account has already existed!',
+        104: 'The mailbox user account does not exist!',
+        105: 'The input username is empty!',
+        106: 'Create User Error',
+        107: 'The username format does not conform to the rules!',
+        108: 'The mailbox format does not conform to the rules! ',
+        109: 'The password format does not conform to the rules!',
+        110: 'Because the user is not activated, the user is an invalid user!',
+        111: 'The password you entered is incorrect!',
+        112: 'Unknown error can not update the password!',
+        113: 'This userID does not exist!',
+        114: 'Delete user failure error',
+        115: 'The userID of the user to delete does not exist!',
+        116: 'Update User information failed',
+        117: 'The userID you provide does not exist!',
+        118: 'You do not enter the password two times!',
+        120: 'The verification code has expired, please get the verification code again!',
+        121: 'The verification code is wrong!',
+        122: 'Please get the verification code first!',
+        140: 'Unable to Logout',
+        150: 'The superID is None or superID is equal to userID',
+        160: 'The All Equipment has been shared by the User!',
+        170: 'A part of the equipment has been shared!',
+        171: 'Delete Equipment sharing failed',
+        172: 'There is no Equipment for this User!',
+        173: 'The UID does not exist!',
+        174: 'The user equipment has already existed!',
+        175: 'The user equipment has already binding!',
+        176: 'Delete equipment error',
+        177: 'Update equipment error',
+        178: 'ADD equipment error',
+        179: 'Device name cannot be repeated',
+        190: 'The rid does not exist!',
+        191: 'The roleName does not exist!',
+        192: 'Delete role error',
+        193: 'An unknown error causes the role can not be deleted!',
+        194: 'Update role error',
+        195: 'An unknown error causes the role can not be updated!',
+        196: 'The User already has this role!',
+        197: 'The user failed to add a new role',
+        198: 'The user does not have this role!',
+        199: 'The user can not delete this role',
+        200: 'The role assigns new permissions to failure',
+        201: 'Some of the permissions you have provided do not exist!',
+        202: 'Delete user rights failure',
+        203: 'Delete role permissions fail',
+        204: 'Failure to clear all users Rights',
+        205: 'All permissions to clear the role fail',
+        206: 'Some of the permissions you have provided have already existed!',
+        207: 'Some of the permissions you provide have already existed, and some of the permissions do not exist!',
+        300: 'Unable to get Token!',
+        301: 'Add Token to database error!',
+        302: 'Update Token to database error',
+        303: 'There is a problem in the Token format!',
+        305: 'The Token format is wrong and the related parameter is None!',
+        304: 'The token base64 Decode Error',
+        306: 'The signature in the token is invalid!',
+        307: 'The Token has expired!',
+        308: 'The Refresh Token has expired.',
+        309: 'This token is not valid because there is no token in the database!',
+        310: 'The userID in the token is None!',
+        311: 'The token is None!',
+        312: 'tokenID_id is None!',
+        313: 'If the user landed on someone else, if not, please login and modify the password.',
+        403: 'API ERROR!',
+        404: 'You don not have permission to access this!',
+        414: 'Client error ! Please confirm the request path!',
+        424: 'Database Error !',
+        444: 'Please confirm the correctness of the parameters!',
+        500: 'Query Database Error:',
+        501: 'Update database error!',
+        502: 'In the database, the parameter fields do not exist!',
+        600: 'You do not have permission to query all user information!',
+        601: 'You have no permission to delete user!',
+        602: 'You have no permission to modify the user information!',
+        603: 'The User account does not have permission to do this!',
+        604: 'You do not have permission to query all user equipmnet information!',
+        605: 'You have no permission to upload OTA files!',
+        606: 'The user has not assigned the role!',
+        607: 'The user does not have permission to add a new role!',
+        608: 'You have no rights to assign roles to users!',
+        609: 'You have no authority to delete the user\'s role!',
+        610: 'You have no permissions to query the roles of all users!',
+        611: 'You have no permissions to add a new permission!',
+        612: 'You have no permissions to query the perms of all users!',
+        613: 'You have no permissions to query the permissions of all roles!',
+        614: 'You do not have the authority to delete the user\'s rights!',
+        615: 'The superAdmin(userID) account does not exist!',
+        616: 'The User(userID) account does not exist!',
+        800: 'Request KEY is None!',
+        801: 'Wrong request KEY!',
+        802: 'The content parameter contains an non - modifiable field!',
+        803: 'The content parameter format is wrong',
+        804: 'One of the parameters of content or sharedAll must be provided!',
+        805: 'One of the parameters of content or unsharedAll must be provided!',
+        806: 'The content parameter is incomplete!',
+        807: 'The role has already existed!',
+        808: 'Add a new role to the wrong',
+        815: 'The permissions have already existed!',
+        816: 'Add a new permissions error',
+        817: 'The permissions do not exist!',
+        818: 'The deletion of the permissions failed',
+        700: 'Upload file error',
+        701: 'The file does not exist!',
+        702: 'Open the file error',
+        704: 'The Execl file contains n tables!',
+        705: 'The Execl file or TXT file contains some error data!',
+        706: 'The file content format is wrong!',
+        707: 'Other unknown errors',
+        900: 'There is no information about this version!',
+        901: 'Getting URL failure!',
+        902: 'The code does not exist!',
+        903: 'The name of the file does not meet the conditions!',
+        904: 'The equipment version information has already existed.',
+        905: 'Add equipment version information failed',
+        906: 'Cause of file operation error',
+        907: 'The download file does not exist!',
+        908: 'CRC32 Error',
+        910: 'There are too many downloads. Please wait a moment...',
+        1000: 'Sorry, the link has expired!',
+        1001: 'The link is wrong!',
+        1002: 'Send mail Fail!',
+        1003: 'The link content format does not conform to the rules!',
+        1004: 'You have applied for reset password operation, please confirm it by mail.',
+        1021: 'Sending SMS verification code error',
+        1022: 'Network error occurs when the authentication code is sent',
+        1023: 'Send phone voice verification code error',
+        10002: 'The user landed else where before, if not, please modify the user account and password!',
+    }
+    data_cn = {
+        0: '成功',
+        4: '操作失败',
+        5: '请一分钟后再尝试',
+        10: res,
+        13: '该设备不存在',
+        14: '该设备不属于您',
+        15: '您尚未打开此服务',
+        44: '系统错误!无法发送电子邮件',
+        48: '系统对象错误',
+        54: '数据已存在!',
+        55: '数据不存在!',
+        60: 'APP信息已经存在',
+        89: '您已经获得了验证码,请在5分钟后检查或再次确认。',
+        90: '登录次数过多,请在10秒内尝试。',
+        101: '手机的用户账号已经存在!',
+        102: '手机的用户账号不存在!',
+        103: '邮箱用户帐户已经存在!',
+        104: '邮箱用户帐户不存在!',
+        105: '输入用户名为空!',
+        106: '创建用户错误',
+        107: '用户名格式不符合规则!',
+        108: '邮箱格式不符合规则!',
+        109: '密码格式不符合规则!',
+        110: '因为用户未激活,用户是无效用户!',
+        111: '您输入的密码不正确!',
+        112: '未知错误不能更新密码!',
+        113: '此用户标识不存在!',
+        114: '删除用户失败错误',
+        115: '删除用户的用户名不存在!',
+        116: '更新用户信息失败',
+        117: '您提供的用户标识不存在!',
+        118: '你不输入密码两次!',
+        120: '验证码已经过期,请再次获得验证码!',
+        121: '验证码错了!',
+        122: '请先拿到验证码!',
+        140: '无法注销',
+        150: '超级用户不存在或者用户id错误',
+        160: '所有设备已被用户共享!',
+        170: '部分设备已经共享!',
+        171: '删除设备共享失败',
+        172: '这个用户没有设备!',
+        173: '设备UID不存在!',
+        174: '用户设备已经存在!',
+        175: '用户设备已经绑定了!',
+        176: '删除设备错误',
+        177: '更新设备错误',
+        178: '添加设备错误',
+        179: '设备名称不能重复',
+        190: '角色rid不存在!',
+        191: '角色名不存在!',
+        192: '删除角色错误',
+        193: '未知的错误导致角色不能被删除!',
+        194: '更新角色错误',
+        195: '未知的错误导致角色无法更新!',
+        196: '该用户已经拥有这个角色!',
+        197: '该用户未能添加新角色。',
+        198: '该用户没有这个角色!',
+        199: '该用户不能删除此角色',
+        200: '为角色分配新权限失败。',
+        201: '您提供的某些权限不存在!',
+        202: '删除用户权限失败',
+        203: '删除角色权限失败',
+        204: '未能清除所有用户权限',
+        205: '清除角色所有的权限失败',
+        206: '您提供的某些权限已经存在!',
+        207: '您提供的某些权限已经存在,并且某些权限不存在!',
+        300: '无法获取令牌!',
+        301: '添加令牌到数据库错误!',
+        302: '更新令牌到数据库错误',
+        303: '令牌格式有问题!',
+        305: '令牌格式是错误的,相关参数是不存在的!',
+        304: '令牌Base64解码错误',
+        306: '令牌中的签名无效!',
+        307: '令牌已经过期!',
+        308: '刷新令牌已过期。',
+        309: '此令牌无效,因为数据库中没有标记!',
+        310: '令牌中的用户名不存在!',
+        311: '令牌为空!',
+        312: '令牌id为空!',
+        313: '账号在其它地方进行过登录,如果不是本人操作,请登录并修改密码。',
+        403: 'API错误!',
+        404: '您没有访问的权限!',
+        414: '客户端错误!请确认请求路径!',
+        424: '数据库错误!',
+        444: '请确认参数的正确性!',
+        500: '查询数据库错误!',
+        501: '更新数据库错误!',
+        502: '在数据库中,参数字段不存在!',
+        600: '您没有权限查询所有用户信息!',
+        601: '您没有权限删除用户!',
+        602: '您没有修改用户信息的权限!',
+        603: '用户帐户没有权限执行此操作!',
+        604: '您没有权限查询所有用户设备信息!',
+        605: '你没有上传OTA文件的权限!',
+        606: '用户没有分配角色!',
+        607: '用户没有添加新角色的权限!',
+        608: '您无权分配角色给用户!',
+        609: '您没有权限删除用户的角色!',
+        610: '您没有权限查询所有用户的角色!',
+        611: '您没有添加新权限的权限!',
+        612: '您没有查询所有用户的权限的权限!',
+        613: '您没有权限查询所有角色的权限!',
+        614: '您没有权限删除用户的权限!',
+        615: '超级管理员(USEID)帐户不存在!',
+        616: '用户(USERID)帐户不存在!',
+        800: '请求参数不存在!',
+        801: '错误的请求参数!',
+        802: 'content参数错误!',
+        803: 'content参数格式错误',
+        804: 'content或sharedAll参数没有传递',
+        805: 'content或unsharedAll参数没有传递',
+        806: 'content参数不完整!',
+        807: '角色已经存在!',
+        808: '添加新角色错误',
+        815: '权限已经存在!',
+        816: '新增权限错误',
+        817: '权限不存在',
+        818: '删除权限错误',
+        700: '上传文件错误',
+        701: '文件不存在',
+        702: '打开文件错误',
+        704: 'Excel文件包含n个表!',
+        705: 'Excel文件或TXT文件包含一些错误数据!',
+        706: '文件内容格式错误!',
+        707: '其他未知错误',
+        900: '版本信息不存在',
+        901: '获取链接失败',
+        902: 'code不存在!',
+        903: '文件名不符合条件!',
+        904: '设备版本信息已经存在。',
+        905: '添加设备版本信息失败',
+        906: '文件操作错误',
+        907: '下载文件不存在!',
+        908: 'CRC32 错误',
+        910: '下载太多了。请稍等…',
+        1000: '对不起,链接已经过期!',
+        1001: '链接错误!',
+        1002: '发送邮件失败!',
+        1003: '链接内容格式不符合规则!',
+        1004: '您已申请重置密码操作,请通过邮件确认。',
+        1021: '发送短信验证码错误',
+        1022: '当发送验证码时发生网络错误',
+        1023: '发送电话语音验证码错误',
+        10002: '用户登陆之前的其他地方,如果没有,请修改用户帐号和密码!',
+    }
+    if LANGUAGE == 'en':
+        data = data_en
+    elif LANGUAGE == 'cn':
+        data = data_cn
+    else:
+        data = data_en
+    return {'code': code, 'reason': data[code], 'result': res}
+
+
+def ResponseFormal(code, res={},*args, **kwargs):
+    data = ResponseData(code, res,*args, **kwargs)
+    resJSON = json.dumps(
+        {
+            "result_code": data['code'],
+            "reason": data['reason'],
+            "result": data['result'],
+            "error_code": data['code'],
+        }, ensure_ascii=False)
+    return resJSON
+
+
+def ResponseJSON(code, res={},*args, **kwargs):
+    return HttpResponse(ResponseFormal(code, res,*args, **kwargs))

+ 40 - 4
Service/TemplateService.py

@@ -16,6 +16,17 @@ class TemplateService:
     @staticmethod
     def log_api():
         apiList = [
+            'account/login',
+            # 'account/logout',
+            'account/authcode',
+            'account/register',
+            'account/changePwd',
+            'account/active',
+            'account/forget',
+            'account/activate',
+            'account/password/edit',
+            'account/password/mobiletoResetPwd',
+            'account/modifyPwd',
             'account/showUserMore',
             'account/perfectUserInfo',
             'account/getAvatar',
@@ -32,6 +43,7 @@ class TemplateService:
             'equipment/modifyUserEquipment',
             'equipment/showAllUserEquipment',
             'accessLog/findEquipmentInfo',
+            'accessLog/testApi',
             'OTA/uploads',
             'OTA/download',
             'OTA/downloads',
@@ -41,6 +53,8 @@ class TemplateService:
             'OTA/showAllEquipmentVersion',
             'OTA/getUpdataFileUrl',
             'mobile/uploadlogFile',
+            # 'toekn/refreshToken',
+            'import/batchAddEquipment',
             'roles/addNewRole',
             'roles/queryRole',
             'roles/delRole',
@@ -50,16 +64,37 @@ class TemplateService:
             'perms/queryPerms',
             'perms/modifyPerms',
             'permsManager/queryRolePerms',
+            'api-token-auth',
+            'api-token-refresh',
+            'api-token-verify',
+
             'uploads/upgrade',
             'upgrade/download',
             'downloads/upgrade',
             'getOTAurl/getUpdataFileUrl',
+
+            # 'media/stream',
+            # 'media/auth_stream',
+            # 'media/send_video_s3',
+            # 'media/auth_live',
+
             'equipment/sensor',
             'equipment/info',
+
             'adminManage/manage',
+
             'equipment/OTA',
+
             'feedbackInfo',
+
             'appInfo',
+            'meal/manage',
+            'device/meal',
+            'HlsManage',
+            'device/manage',
+            # 'device/online',
+            # 'device/offline',
+            # 'device/updateIP',
         ]
         return apiList
 
@@ -71,6 +106,7 @@ class TemplateService:
             data = {
                 'cn': {
                     'title': '注册码获取邮件',
+                    # 'body': '恭喜你来到安士佳公司物联网系统,您获取的注册码为:',
                     'body': """
                         <!DOCTYPE html>
     <html>
@@ -207,7 +243,7 @@ class TemplateService:
                     <div class="xboxcontent">
                         <div class="neirong">
                             <p><b>请核对你的用户名:</b><span id="userName" class="font_darkblue">{username}</span></p>
-                            <p><b>验证码:</b><span class="font_lightblue"><span id="yzm" data="{captcha}" onclick="return false;" t="7" style="border-bottom: 1px dashed rgb(204, 204, 204); z-index: 1; position: static;">{captcha}</span></span><br><span class="font_gray">(请输入该验证码完成验证,验证码10分钟内有效!)</span></p>
+                            <p><b>验证码:</b><span class="font_lightblue"><span id="yzm" data="{captcha}" onclick="return false;" t="7" style="border-bottom: 1px dashed rgb(204, 204, 204); z-index: 1; position: static;">{captcha}</span></span><br><span class="font_gray">(请输入该验证码完成验证,验证码5分钟内有效!)</span></p>
                             <div class="line">如果你未申请注册服务,请忽略该邮件。</div>
                         </div>
                     </div>
@@ -363,7 +399,7 @@ class TemplateService:
                     <div class="xboxcontent">
                         <div class="neirong">
                             <p><b>Please check your username:</b><span id="userName" class="font_darkblue">{username}</span></p>
-                            <p><b>Your validation code:</b><span class="font_lightblue"><span id="yzm" data="{captcha}" onclick="return false;" t="7" style="border-bottom: 1px dashed rgb(204, 204, 204); z-index: 1; position: static;">{captcha}</span></span><br><span class="font_gray">(Please input the verification code to complete the verification. The verification code is valid in 10 minutes!)</span></p>
+                            <p><b>Your validation code:</b><span class="font_lightblue"><span id="yzm" data="{captcha}" onclick="return false;" t="7" style="border-bottom: 1px dashed rgb(204, 204, 204); z-index: 1; position: static;">{captcha}</span></span><br><span class="font_gray">(Please input the verification code to complete the verification. The verification code is valid in 5 minutes!)</span></p>
                             <div class="line">If you have not applied for registration, please ignore the email.</div>
                         </div>
                     </div>
@@ -402,11 +438,11 @@ class TemplateService:
             data = {
                 'cn': {
                     'title': '重置密码信息',
-                    'body': '您好{username}\n' + '您已经请求了重置密码,可以点击下面的链接来重置密码\n' + '<p><a href="{reset_link}">{reset_link}</a></p>\n' + '更改后的密码为: {reset_pwd}\n如果你没有请求重置密码,请忽略这封邮件.\n在你点击上面链接修改密码之前,你的密码将会保持不变\n'
+                    'body': '您好{username}\n' + '您已经请求了重置密码,可以点击下面的链接来重置密码\n' + '<p><a href="{domain}/account/password/edit?reset_password_token={token}&reset_pwd_val={redis_val}">{domain}/account/password/edit?reset_password_token={token}&reset_pwd_val={redis_val}</a></p>\n' + '更改后的密码为:.{userPwd}\n如果你没有请求重置密码,请忽略这封邮件.\n在你点击上面链接修改密码之前,你的密码将会保持不变\n'
                 },
                 'en': {
                     'title': 'Reset the password information',
-                    'body': 'Hello! Dear {username}.<br>You have asked to reset the password, and you can click the link below to reset the password.<br>' + '<p><a href="{reset_link}">{reset_link}</a></p><br>' + 'The new password is: {reset_pwd}<br>If you do not request to reset the password, please ignore this mail.',
+                    'body': 'Hello! Dear {username}.<br>You have asked to reset the password, and you can click the link below to reset the password.<br>' + '<p><a href="{domain}/account/password/edit?reset_password_token={token}&reset_pwd_val={redis_val}">{domain}/account/password/edit?reset_password_token={token}&reset_pwd_val={redis_val}</a></p><br>' + 'The new password is: {userPwd}<br>If you do not request to reset the password, please ignore this mail.',
                 }
             }
         return data[language]

+ 270 - 0
Service/TokenManager.py

@@ -0,0 +1,270 @@
+# -*- coding: utf-8 -*-
+from datetime import datetime
+from calendar import timegm
+from Model.models import AuthToken_Token, Device_User
+import time, base64, hmac, random, string,simplejson as json
+import traceback
+from django.utils.timezone import utc
+import datetime as utdatetime
+from Service.ResponseService import ResponseFormal
+from Ansjer.config import EXPIRATION_DELTA,REFRESH_EXPIRATION_DELTA
+
+
+def SQLManager(content):
+    tokenID_id = content.get('tokenID_id', None)
+    if tokenID_id != None:
+        tokenIDValid = AuthToken_Token.objects.filter(tokenID_id=tokenID_id)
+        if tokenIDValid:
+            try:
+                content.pop('tokenID_id')
+                tokenIDValid.update(**content)
+                tokenIDValid.update(last_update=utdatetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc))
+            except Exception as e:
+                errorInfo = traceback.format_exc()
+                print('更新Token错误: %s ' % errorInfo)
+                return ResponseFormal(302,{'details':repr(e)})
+            else:
+                return ResponseFormal(0)
+        else:
+            try:
+                authToken = AuthToken_Token(**content)
+                authToken.save()
+            except Exception as e:
+                errorInfo = traceback.format_exc()
+                print('添加Token错误: %s ' % errorInfo)
+                return ResponseFormal(301,{'details':repr(e)})
+            else:
+                return ResponseFormal(0)
+    else:
+        return ResponseFormal(312)
+
+class JSONTokenManager:
+    def __init__(self):
+        self.iCode = ''
+        self.errormsg = ''
+        self.accessDict = {}
+        self. refreshDict = {}
+
+    def getSalt(self, strLen = 6):
+        """
+        获取指定长度strLen的字符串
+        :param strLen:
+        :return: 返回获取到指定长度的字符串
+        """
+        salt = ''.join(random.sample(string.ascii_letters + string.digits, strLen))
+        return salt
+
+    def generate_AToken(self, JSON , iCode):
+        """
+
+        :param JSON:
+        :param iCode:
+        :return:
+        """
+        orig_iat = datetime.utcnow().utctimetuple()
+        exp_at = (datetime.utcnow() + EXPIRATION_DELTA).utctimetuple()
+        exp_rt = (datetime.utcnow() + REFRESH_EXPIRATION_DELTA).utctimetuple()
+
+
+        userJSON = json.loads(JSON)
+        expDict = {'orig_iat': timegm(orig_iat), 'exp_at': timegm(exp_at), 'exp_rt': timegm(exp_rt)}
+        userJSON.update(expDict)
+        exp_rtJSON = json.dumps(userJSON, ensure_ascii=False)
+        userJSON.pop('exp_rt')
+        exp_atJSON = json.dumps(userJSON, ensure_ascii=False)
+        print(exp_rtJSON, exp_atJSON)
+
+        hmac_at = hmac.new(exp_atJSON.encode('utf-8'), iCode.encode('utf-8')).hexdigest()
+        hmac_rt = hmac.new(exp_rtJSON.encode('utf-8'), iCode.encode('utf-8')).hexdigest()
+        access_token = exp_atJSON + '&' + hmac_at
+        refresh_token = exp_rtJSON + '&' + hmac_rt
+
+        b64_access_token = base64.urlsafe_b64encode(access_token.encode("utf-8"))
+        b64_refresh_token = base64.urlsafe_b64encode(refresh_token.encode("utf-8"))
+
+        tokenDict = {'access_token': b64_access_token.decode('utf-8'), 'refresh_token': b64_refresh_token.decode('utf-8'), \
+                     'iCode': iCode, 'mCode': userJSON.get('mCode', '')}
+        tokenDict['tokenID_id'] = userJSON.get('userID', None)
+        print(tokenDict)
+
+        sqlJSON = SQLManager(content=tokenDict)
+        sqlDict = json.loads(sqlJSON)
+        error_code = sqlDict.get('error_code', None)
+        if error_code != None and error_code == 0:
+            b64_alist = list(b64_access_token.decode('utf-8'))
+            b64_alist.insert(12, self.getSalt(strLen=6))
+            b64_atoken = ''.join(b64_alist)
+            b64_rflist = list(b64_refresh_token.decode('utf-8'))
+            b64_rflist.insert(12, self.getSalt(strLen=6))
+            b64_rftoken = ''.join(b64_rflist)
+            token = {'access_token': b64_atoken[::-1], 'refresh_token': b64_rftoken[::-1]}
+            dictJSON = {'result_code': 0,  'reason': 'Success', 'result': token, 'error_code': 0}
+            return json.dumps(dictJSON, ensure_ascii=False)
+        else:
+            return sqlJSON
+
+    def verify_AToken(self, token, isAToken = True):
+        if token == 'stest':
+            self.accessDict['userID'] = '151547867345163613800138001'
+            return 0
+        if token == 'sformal':
+            self.accessDict['userID'] = '151564262337939513800138001'
+            return 0
+        """
+        :param token:
+        :param isAToken:
+        :return:
+        """
+        access_token = token[::-1]
+        if len(access_token) < 18:
+            return 303
+        atoken = access_token[:12] + access_token[18:]
+        print(atoken)
+        try:
+            token_str = base64.urlsafe_b64decode(atoken).decode('utf-8')
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print('base64 decode error: %s' % errorInfo)
+
+            self.errormsg = 'base64 decode error: %s' % repr(e)
+            return 304
+
+        token_list = token_str.split('&')
+        if len(token_list) != 2:
+            return 303
+
+        ts_str = token_list[0]
+        jsonDict = json.loads(ts_str)
+        print(jsonDict)
+
+        userID = jsonDict.get('userID', None)
+
+        mCode = jsonDict.get('mCode', None)
+        if userID == None or mCode == None:
+            return 303
+
+        try:
+            if isAToken:
+                authToken = AuthToken_Token.objects.filter(tokenID_id=userID, access_token=atoken)
+            else:
+                authToken = AuthToken_Token.objects.filter(tokenID_id=userID, refresh_token=atoken)
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print('Database Query error: %s' % errorInfo)
+
+            self.errormsg = 'Database Query error: %s' % repr(e)
+            return 500
+
+        if authToken:
+            self.iCode = authToken[0].iCode
+            hmac_token = token_list[1]
+            hmac_at = hmac.new(ts_str.encode('utf-8'), self.iCode.encode('utf-8')).hexdigest()
+            if hmac_at != hmac_token:
+                return 306
+        else:
+            try:
+                mCodeToken = AuthToken_Token.objects.filter(tokenID_id=userID)
+            except Exception as e:
+                errorInfo = traceback.format_exc()
+                print('Database Query error: %s' % errorInfo)
+
+                self.errormsg = 'Database Query error: %s' % repr(e)
+                return 500
+
+            if mCodeToken:
+                '''
+                if mCodeToken[0].mCode != mCode:
+                    return 313
+                else:
+                    return 309
+                '''
+                pass
+            else:
+                return 309
+
+        if isAToken:
+            self.accessDict = jsonDict
+            exp_at = jsonDict.get('exp_at', None)
+            if exp_at == None:
+                return 305
+            if time.time() - float(exp_at) > 0:
+                return 309
+        else:
+            self.refreshDict = jsonDict
+            exp_rt = jsonDict.get('exp_rt', None)
+            if exp_rt == None:
+                return 305
+            if time.time() - float(exp_rt) > 0:
+                try:
+                    Device_User.objects.filter(userID = userID).update(online = False)
+                except Exception as e:
+                    errorInfo = traceback.format_exc()
+                    print('Database Query error: %s' % errorInfo)
+
+                    self.errormsg = 'Database Query error: %s' % repr(e)
+                    return 500
+
+                return 308
+        try:
+            device_user = Device_User.objects.get(userID=userID)
+            device_user.online=True
+            device_user.save()
+        except Exception as e:
+            pass
+        return 0
+
+    def refresh_AToken(self, Token):
+        """
+
+        :param Token:
+        :return:
+        """
+        print('refresh_AToken')
+        error_code = self.verify_AToken(token = Token, isAToken = False)
+        if error_code == 0:
+            refreshDict = self.refreshDict
+            if refreshDict.get('exp_at', None) != None:
+                exp_at = (datetime.utcnow() + EXPIRATION_DELTA).utctimetuple()
+                refreshDict['exp_at'] = timegm(exp_at)
+                refreshDict.pop('exp_rt')
+                JSON = json.dumps(refreshDict, ensure_ascii=False)
+                hmac_at = hmac.new(JSON.encode('utf-8'), self.iCode.encode('utf-8')).hexdigest()
+                access_token = JSON + '&' + hmac_at
+                b64_at = base64.urlsafe_b64encode(access_token.encode("utf-8"))
+                userID = refreshDict.get('userID', None)
+                tokenDict = {'access_token': b64_at.decode('utf-8')}
+                tokenDict['tokenID_id'] = userID
+                sqlJSON = SQLManager(content=tokenDict)
+                sqlDict = json.loads(sqlJSON)
+                error_code = sqlDict.get('error_code', None)
+                if error_code != None and error_code == 0:
+                    b64_alist = list(b64_at.decode('utf-8'))
+                    b64_alist.insert(12, self.getSalt(strLen=6))
+                    b64_atoken = ''.join(b64_alist)
+                    token = {'access_token': b64_atoken[::-1], }
+                    dictJSON = {'result_code': 0, 'reason': 'Success', 'result': token, 'error_code': 0}
+                    return json.dumps(dictJSON, ensure_ascii=False)
+                else:
+                    return sqlJSON
+        else:
+            return self.errorCodeInfo(error_code)
+
+    def deToken(self,token):
+        try:
+            b64_alist = list(token)
+            b64_alist.insert(12, self.getSalt(strLen=6))
+            b64_atoken = ''.join(b64_alist)
+            res_token = b64_atoken[::-1]
+            code = self.verify_AToken(res_token)
+            if code == 0:
+                return res_token
+            else:
+                return False
+        except Exception as e:
+            return False
+
+    def errorCodeInfo(self, error_code):
+        print(error_code)
+
+        return ResponseFormal(error_code)
+

+ 12 - 7
Service/middleware.py

@@ -1,12 +1,17 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
-from django.utils.deprecation import MiddlewareMixin
-
 from Ansjer import settings as api_settings
-from Object.ResponseObject import ResponseObject
 from Service.MiscellService import MiscellService
-
-
+from Service.ResponseService import ResponseJSON
+from django.utils.deprecation import MiddlewareMixin
+'''
+try:
+    from django.utils.deprecation import MiddlewareMixin
+except ImportError:  # pragma: no cover
+    # Not required for Django <= 1.9, see:
+    # https://docs.djangoproject.com/en/1.10/topics/http/middleware/#upgrading-pre-django-1-10-style-middleware
+    MiddlewareMixin = object  # pragma: no cover
+'''
 class StatisticsUrlMiddleware(MiddlewareMixin):
     def _https_statistics_to_reverse(self, request):
         '''
@@ -52,8 +57,7 @@ class StatisticsUrlMiddleware(MiddlewareMixin):
             print('process_request', request)
         result = self._https_statistics_to_reverse(request)
         if result == -1:
-            response = ResponseObject()
-            return response.json(910)
+            return ResponseJSON(910)
         return None
 
     def process_view(self, request, callback, callback_args, callback_kwargs):
@@ -71,6 +75,7 @@ class StatisticsUrlMiddleware(MiddlewareMixin):
         :return: 必须返回 HttpResponse 对象. 这个 response 对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。
             该处理器能修改 response 的内容;一个常见的用途是内容压缩,如 gzip 所请求的 HTML 页面。
         '''
+
         self._https_statistics_to_close(request)
         ########记录访问日志
         if request.path !='/favicon.ico':

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно