Explorar el Código

Merge branch 'dev' into lang

lang hace 4 años
padre
commit
6500a10073

+ 6 - 6
Ansjer/config_test.py

@@ -23,15 +23,15 @@ OAUTH_REFRESH_TOKEN_SECRET = 'test_r+jbgnw%@1%zy^=@dn62%'
 DOMAIN_HOST = 'test.dvema.com'
 SERVER_HOST = 'localhost'
 PAYPAL_CRD = {
-    # "mode": "live",  # sandbox or live
-    # "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
-    # "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
+    "mode": "live",  # sandbox or live
+    "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
+    "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
     # "mode": "sandbox",  # sandbox or live
     # "client_id": "AeuhR7FHisO-lOd2OwtzyDu7PSLMmDZoDLgmzuEQ12WCtTu_8Z1AzcD4gG5SnymnuvJs-n5KBB8H9Z_G",
     # "client_secret": "EGkMCB3RWTcUGJGDYahJ9mCO0AQzEn2AvFfx1GAFjfyyn7-8a0NObcZks89QorlFpvNWTsDXVa2INRNM"
-    "mode": "sandbox",  # sandbox or live
-    "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
-    "client_secret": "EO8kRc8yioDk0i2Qq-QMcVFfwkmyMJorTvBSLDTnxDJJ_wb9VoM_0jkUY9iEng2Flp1ze8wQOGpH5nB2"
+    # "mode": "sandbox",  # sandbox or live
+    # "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
+    # "client_secret": "EO8kRc8yioDk0i2Qq-QMcVFfwkmyMJorTvBSLDTnxDJJ_wb9VoM_0jkUY9iEng2Flp1ze8wQOGpH5nB2"
 }
 # PAYPAL_CRD = {
 #     "mode": "sandbox",  # sandbox or live

+ 7 - 1
Ansjer/urls.py

@@ -12,7 +12,8 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     ApplicationController, UserExController, CloudStorage, TestApi, UserBrandControllerV2, \
     StatisticsController, Alexa, FAQController, AppLogController, EquipmentVersionLimit, VoicePromptController, \
     CDKController, \
-    DeviceTypeController, CloudTest, Cloudsum, IotCoreController, OperatingLogs, ProcessInfo
+    DeviceTypeController, CloudTest, Cloudsum, IotCoreController, OperatingLogs, ProcessInfo, UserRegionController, \
+    VerifyCodeController
 
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -154,6 +155,7 @@ urlpatterns = [
 
     # 屏蔽
     url(r'^user/initInfo$', UserController.InitInfoView.as_view()),
+    url(r'^user/information/(?P<operation>.*)$', UserController.InitUserInformationView.as_view()),
     # 获取时区相关信息
     url(r'^getTZ$', EquipmentStatus.getTZ),
 
@@ -277,6 +279,10 @@ urlpatterns = [
     url(r'^ProcessInfo/(?P<operation>.*)$', ProcessInfo.ProcessInfoView.as_view()),
     url(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
 
+    url(r'userRegion/(?P<operation>.*$)', UserRegionController.UserRegionView.as_view()),
+
+    # 验证验证码
+    url(r'verifyCode/(?P<operation>.*$)', VerifyCodeController.VerifyCodeView.as_view()),
 
     re_path('(?P<path>.*)', LogManager.errorPath),
 

+ 6 - 6
Controller/CloudStorage.py

@@ -208,7 +208,7 @@ class CloudStorageView(View):
     def do_commodity_list(self, request_dict, userID, response):
         mold = request_dict.get('mold', None)
         uid = request_dict.get('uid', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         qs = Store_Meal.objects
         eq = ExperienceContextModel.objects.filter(uid=uid, experience_type=0).values('id')
         # userqs = Device_User.objects.filter(userID=userID).values('is_experience')
@@ -739,7 +739,7 @@ class CloudStorageView(View):
     def do_pay_ok(self, request_dict):
         response = HttpResponse()
         paytype = request_dict.get('paytype', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
 
         showtitle = "支付成功"
         if paytype == "10" :
@@ -932,7 +932,7 @@ class CloudStorageView(View):
         paymentId = request_dict.get('paymentId', None)
         PayerID = request_dict.get('PayerID', None)
         orderID = request_dict.get('orderID', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         try:
             order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
 
@@ -1117,7 +1117,7 @@ class CloudStorageView(View):
         pay_type = int(request_dict.get('pay_type', None))
         rank = request_dict.get('rank', None)
         is_select_discount = request_dict.get('is_select_discount', 0)
-        lang = request_dict.get('lang', 0)
+        lang = request_dict.get('lang', 'en')
         if not uid or not channel or not pay_type or not rank:
             return response.json(444)
         dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1).values(
@@ -1282,7 +1282,7 @@ class CloudStorageView(View):
         pay_type = int(request_dict.get('pay_type', None))
         rank = request_dict.get('rank', None)
         cdk = request_dict.get('cdk', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         if cdk != None and pay_type == 11:
             cdk_qs = CDKcontextModel.objects.filter(cdk=cdk).values('is_activate', 'rank__id', 'rank__commodity_code')
             if not cdk_qs.exists():
@@ -1436,7 +1436,7 @@ class CloudStorageView(View):
     # 设备关联套餐列表
     def device_commodity(self, request_dict, userID, response):
         uid = request_dict.get('uid', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         dv_qs = Device_Info.objects.filter(userID_id=userID, UID=uid, isShare=False, isExist=1) \
             .values('vodPrimaryUserID')
         if not dv_qs.exists() or dv_qs[0]['vodPrimaryUserID'] != userID:

+ 10 - 7
Controller/CloudTest.py

@@ -10,7 +10,7 @@ from django.db import transaction
 from django.views.generic.base import View
 
 from Object.TokenObject import TokenObject
-from Service import CommonService
+from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Object.ResponseObject import ResponseObject
 from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel, Unused_Uid_Meal, \
@@ -53,16 +53,19 @@ class cloudTestView(View):
         oldUserID = request_dict.get("oldUserID", None)
         username = request_dict.get("username", None)
         uid = request_dict.get('uid', None)
-        nowTime = int(time.time())
+        now_time = CommonService.timestamp_to_str(int(time.time()))
+        # print('now_time: ', now_time)
 
         try:
             # 查询该userID下是否存在此设备
             old_deviceInfo_qs = Device_Info.objects.filter(userID_id=oldUserID, UID=uid, isExist=1).values('isShare','vodPrimaryUserID')
             if not old_deviceInfo_qs.exists():
                 return response.json(10008)
-            # 判断新用户的userID是否跟旧用户的一样
-            newUserID = ModelService.get_userID_byname(username)
-            if newUserID == oldUserID:
+
+            newUserID = ModelService.get_userID_byname(username)    # 根据username获取userID
+            if newUserID is None:   # 没有此用户
+                return response.json(104)
+            if newUserID == oldUserID:  # 新用户的userID跟旧用户的一样
                 return response.json(10009)
             # 分享的设备不能转移
             isShare = old_deviceInfo_qs[0]['isShare']
@@ -84,7 +87,7 @@ class cloudTestView(View):
 
             with transaction.atomic():
                 # 更新旧设备的userID,设备添加时间
-                old_deviceInfo_qs.update(userID=newUserID, data_joined=nowTime)
+                old_deviceInfo_qs.update(userID=newUserID, data_joined=now_time)
                 # 更新设备的主用户信息
                 Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
                 VodHlsModel.objects.filter(uid=uid).delete()
@@ -148,7 +151,7 @@ class cloudTestView(View):
                     'bucket_id': unused['bucket_id'],
                     'addTime': unused['addTime'],
                     'endTime': endTime,
-                    'updateTime': unused['nowTime'],
+                    'updateTime': nowTime,
                     'status': 1,
                     'use_status': 1,
                     'has_unused': has_unused

+ 1 - 1
Controller/CloudVod.py

@@ -714,7 +714,7 @@ class CloudVodView(View):
 
     def do_pay_status(self, request_dict, userID, response):
         orderID = request_dict.get('orderID', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         om_qs = Order_Model.objects.filter(orderID=orderID).values('status')
         # response = HttpResponse()
         # success_pay_content = '''

+ 20 - 13
Controller/IotCoreController.py

@@ -27,21 +27,28 @@ class IotCoreView(View):
         response = ResponseObject()
 
         if operation == 'createProvisioningClaim':
-            return self.create_provisioning_claim(response)
+            return self.create_provisioning_claim(request_dict, response)
         else:
             return response.json(404)
 
-    def create_provisioning_claim(self, response):
-        client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_REGION, aws_access_key_id=AWS_IOT_SES_ACCESS_ID,
-                              aws_secret_access_key=AWS_IOT_SES_ACCESS_SECRET)
-        result = client.create_provisioning_claim(templateName='Ansjer_Iot_Queue')
+    def create_provisioning_claim(self, request_dict, response):
 
-        res = {
-            'certificateId': result['certificateId'],
-            'certificatePem': result['certificatePem'],
-            'publicKey': result['keyPair']['PublicKey'],
-            'privateKey': result['keyPair']['PrivateKey'],
-            'endpoint': 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
-        }
+        country = request_dict.get('country', None)
+        state = request_dict.get('state', None)
 
-        return response.json(0, {'res': res})
+        if country and state:
+
+            client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_REGION, aws_access_key_id=AWS_IOT_SES_ACCESS_ID,
+                                  aws_secret_access_key=AWS_IOT_SES_ACCESS_SECRET)
+            result = client.create_provisioning_claim(templateName='Ansjer_Iot_Queue')
+
+            res = {
+                'certificateId': result['certificateId'],
+                'certificatePem': result['certificatePem'],
+                'publicKey': result['keyPair']['PublicKey'],
+                'privateKey': result['keyPair']['PrivateKey'],
+                'endpoint': 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
+            }
+            return response.json(0, {'res': res})
+        else:
+            return response.json(444)

+ 18 - 16
Controller/OTAEquipment.py

@@ -708,7 +708,7 @@ def getDownLoadOTApackUrl(request):
     file_path = equipmentVersion[0].filePath
     if file_path:
         if file_path.find('static/otapack') != -1:  # 只下载otapack路径下的文件
-            url = SERVER_DOMAIN + 'OTA/downloadsPack/' + file_path  # 复用以前的文件下载方式
+            url = SERVER_DOMAIN + 'OTA/downloadsPack/' + file_path  # 复用app下载ota包的方式
             # SERVER_DOMAIN = 'https://test.dvema.com/'
             # url = SERVER_DOMAIN + 'OTA/downloadsPack/' + file_path
             res = {
@@ -723,7 +723,7 @@ def getDownLoadOTApackUrl(request):
 
 @csrf_exempt
 def checkMaxVersion(request):
-    # QT检查ota设备软件版本是否为最新版本
+    # QT检查ota设备软件版本是否需要更新
     response = ResponseObject()
     if request.method == "POST":
         request_dict = request.POST
@@ -733,24 +733,26 @@ def checkMaxVersion(request):
         return response.json(444)
     deviceType = request_dict.get('deviceType', None)
     version = request_dict.get('version', None) # 设备版本:当前版本+设备规格代码
+    lang = request_dict.get('lang', None)   # 'zh-Hans','en'
     if not deviceType or not version:
         return response.json(444, 'deviceType or version')
-    equipmentVersion = Equipment_Version.objects.filter(mci=deviceType, version=version)
+    now_version = version[1:version.rindex('.')] # 去掉V
+    code = version[version.rindex('.')+1:]
+    equipmentVersion = Equipment_Version.objects.filter(mci=deviceType, code=code, lang=lang, status=1) # order by data_joined
     # 判断是否有该版本存在
     if not equipmentVersion.exists():
         return response.json(907)
-    # now_version = version[:version.rindex('.')]
-    # code = version[version.rindex('.')+1:]
 
-    file_path = equipmentVersion[0].filePath
-    softwareVersion = equipmentVersion[0].softwareVersion
-    max_version = equipmentVersion[0].max_ver
-    if softwareVersion < max_version:
-        # 当前版本小于最大版本,返回文件下载链接
-        url = SERVER_DOMAIN + 'OTA/downloadsPack/' + file_path
-        res = {
-            "url": url,
-        }
-        return response.json(0, res)
-    else:
+    filePath = equipmentVersion[0].filePath
+    softwareVersion = equipmentVersion[0].softwareVersion   # 可用最新版本的版本号
+    maxVersion = equipmentVersion[0].max_ver
+    if now_version >= softwareVersion:
+        # 当前版本大于等于最新版本,不需要更新
         return response.json(902)
+    url = SERVER_DOMAIN + 'OTA/downloadsPack/' + filePath   # 复用app下载ota包的方式
+    res = {
+        'url': url,
+    }
+    return response.json(0, res)
+
+

+ 4 - 4
Controller/OrderContrller.py

@@ -91,7 +91,7 @@ class OrderView(View):
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         uid = request_dict.get('uid', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         if not page or not line:
             return response.json(444, 'page,line')
         page = int(page)
@@ -176,7 +176,7 @@ class OrderView(View):
         status = request_dict.get('status', None)
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
-        lang = request_dict.get('lang',None)
+        lang = request_dict.get('lang', 'en')
         if status and page and line:
             order_qs = None
             status = int(status)
@@ -205,7 +205,7 @@ class OrderView(View):
 
     def do_query_order_detail(self, request_dict, userID, response):
         orderID = request_dict.get('orderID', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         if orderID:
             order_qs = Order_Model.objects.filter(orderID=orderID, userID__userID=userID, rank__lang__lang=lang)
             if order_qs.exists():
@@ -223,7 +223,7 @@ class OrderView(View):
 
     def do_cancel_order(self, request_dict, userID, response):
         orderID = request_dict.get('orderID', None)
-        lang = request_dict.get('lang', None)
+        lang = request_dict.get('lang', 'en')
         if orderID is None:
             return response.json(444)
 

+ 67 - 1
Controller/UserController.py

@@ -32,7 +32,7 @@ from ratelimit.decorators import ratelimit
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
-    UserAppFrequencyModel, CountryIPModel
+    UserAppFrequencyModel, CountryIPModel, UserRegionModel
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
@@ -1782,6 +1782,11 @@ class v3LoginView(TemplateView):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
+        region_id = 0
+        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
+        if user_region_qs.exists():
+            region_id = user_region_qs[0].region_id
+
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -1804,6 +1809,7 @@ class v3LoginView(TemplateView):
             # res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
             res['authType'] = auth_type
             res['subscribe_email'] = users['subscribe_email'] if users['subscribe_email'] is not None else ''
+            res['regionID'] = region_id
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3247,6 +3253,11 @@ class v3LoginByCodeView(View):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
+        region_id = 0
+        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
+        if user_region_qs.exists():
+            region_id = user_region_qs[0].region_id
+
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -3266,6 +3277,7 @@ class v3LoginByCodeView(View):
             res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
             res['phone'] = users['phone'] if users['phone'] is not None else ''
             res['authType'] = auth_type
+            res['region_id'] = region_id
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3495,6 +3507,12 @@ class AppleAuthLogin(View):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
         res['authType'] = auth_type
+
+        region_id = 0
+        user_region_qs = UserRegionModel.objects.filter(user_id=userID)
+        if user_region_qs.exists():
+            region_id = user_region_qs[0].region_id
+        res['region_id'] = region_id
         user_qs.update(last_login=now_time, online=True)
         return response.json(0, res)
 
@@ -3699,3 +3717,51 @@ def updateUserCountry(request):
         # CountryIPModel.objects.filter(id__in=tuple(ids)).update(status=1)
     response = ResponseObject()
     return response.json(0)
+
+
+class InitUserInformationView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'init':
+            return self.do_init(token.userID, request_dict, response)
+        else:
+            return response.json(444)
+
+    def do_init(self, userID, request_dict, response):
+        appBundleId = request_dict.get('appBundleId', None)
+
+        if appBundleId:
+            user_ex_qs = UserExModel.objects.filter(userID_id=userID)
+            now_time = int(time.time())
+            if user_ex_qs.exists():
+                update = {
+                    'appBundleId':appBundleId,
+                    'updTime': now_time
+                }
+                user_ex_qs.update(**update)
+            else:
+
+                user_ex = UserExModel(userID_id=userID, appBundleId=appBundleId, addTime=now_time, updTime=now_time)
+                user_ex.save()
+            return response.json(0)
+        else:
+            return response.json(444)

+ 61 - 0
Controller/UserRegionController.py

@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import time
+
+from django.views import View
+
+from Model.models import Device_User, UserRegionModel
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+
+
+class UserRegionView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'init':
+            return self.do_init(token.userID, request_dict, response)
+        else:
+            return response.json(404)
+
+    def do_init(self, userID, request_dict, response):
+        user_qs = Device_User.objects.filter(userID=userID)
+        if not user_qs.exists():
+            return response.json(309)
+
+        region_id = request_dict.get('country_number', None)
+
+        if region_id:
+            user_region_qs = UserRegionModel.objects.filter(user__userID=userID)
+            now_time = int(time.time())
+            if not user_region_qs.exists():
+                user_region = UserRegionModel(user_id=userID, region_id=region_id, add_time=now_time, update_time=now_time)
+                user_region.save()
+            else:
+                update = {
+                    'region_id': region_id,
+                    'update_time': now_time
+                }
+
+                user_region_qs.update(**update)
+            return response.json(0)
+        else:
+            return response.json(444)

+ 111 - 0
Controller/VerifyCodeController.py

@@ -0,0 +1,111 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from django.views import View
+
+from Controller.CheckUserData import DataValid
+from Object.RedisObject import RedisObject
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+
+
+class VerifyCodeView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        # token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        # if token.code != 0:
+        #     return response.json(token.code)
+
+        if operation == 'forget':
+            return self.verify_forget(request_dict, response)
+        elif operation == 'register':
+            return self.verify_register(request_dict, response)
+        elif operation == 'image':
+            return self.verify_image(request_dict, response)
+        else:
+            return response.json(404)
+
+    def verify_forget(self, request_dict, response):
+        email = request_dict.get('email', None)
+        phone = request_dict.get('phone', None)
+        authcode = request_dict.get('authcode', None)
+        key = '_forgetPwdResetCode'
+        if email is not None:
+            email = email.strip()
+            return self.email_validate(key, email, authcode, response)
+        elif phone is not None:
+            phone = phone.strip()
+            return self.phone_validate(phone, authcode, response)
+        else:
+            return response.json(444)
+
+    def verify_register(self, request_dict, response):
+        email = request_dict.get('email', None)
+        phone = request_dict.get('phone', None)
+        authcode = request_dict.get('authcode', None)
+        key = '_identifyingCode'
+        if email is not None:
+            email = email.strip()
+            return self.email_validate(key, email, authcode, response)
+        elif phone is not None:
+            phone = phone.strip()
+            return self.phone_validate(phone, authcode, response)
+        else:
+            return response.json(444)
+
+    def verify_image(self, request_dict, response):
+        imageCodeId = request_dict.get('imageCodeId', None)
+        authcode = request_dict.get('authcode', None)
+
+        if imageCodeId and authcode:
+            image_code_key = 'image_code_' + imageCodeId
+            redisObj = RedisObject(db=6)
+            # redis里面的验证码
+            redis_image_code = redisObj.get_data(key=image_code_key)
+            # 验证用户输入的验证码和redis中的验证码
+            if redis_image_code is False or authcode.lower() != redis_image_code.lower():
+                return response.json(121)
+            else:
+                return response.json(0)
+        else:
+            return response.json(444)
+
+    def email_validate(self, key, email, authcode, response):
+        authcode.strip()
+        data_valid = DataValid()
+        if data_valid.email_validate(email) is not True:
+            return response.json(105)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=email + key)
+        if resetCode is False:
+            return response.json(120)
+        if authcode != resetCode:
+            return response.json(121)
+        return response.json(0)
+
+    def phone_validate(self, key, phone, authcode, response):
+        authcode.strip()
+        data_valid = DataValid()
+        if data_valid.mobile_validate(phone) is not True:
+            return response.json(100)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=phone + key)
+        if resetCode is False:
+            return response.json(120)
+        print(resetCode)
+        if authcode != resetCode:
+            return response.json(121)
+        return response.json(0)

+ 15 - 2
Model/models.py

@@ -471,8 +471,8 @@ class Pay_Type(models.Model):
 # 套餐语言表
 class Lang(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增ID')
-    lang = models.CharField(default='', max_length=20, verbose_name='语言/国家')
-    title = models.CharField(blank=True, max_length=32, verbose_name='标题')
+    lang = models.CharField(default='', max_length=20, db_index=True, verbose_name='语言/国家')
+    title = models.CharField(blank=True, max_length=320, verbose_name='标题')
     content = models.TextField(blank=True, null=True, verbose_name='描述')
     discount_content = models.CharField(blank=True, max_length=320, verbose_name=u'优惠信息描述')
 
@@ -1256,3 +1256,16 @@ class ProcessInfoLogsModel(models.Model):
         db_table = 'processinfo_logs'
         verbose_name = '过程信息表'
         verbose_name_plural = verbose_name
+
+
+class UserRegionModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    user = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE, verbose_name='关联用户表')
+    region_id = models.IntegerField(default=0, verbose_name='地区id')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
+    update_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'user_region'
+        verbose_name = '用户地区表'
+        verbose_name_plural = verbose_name