فهرست منبع

修改了两个接口,和后台的管理视频推送详情接口。

pzb 5 سال پیش
والد
کامیت
0e098d37f6
4فایلهای تغییر یافته به همراه353 افزوده شده و 3 حذف شده
  1. 5 0
      Ansjer/urls.py
  2. 25 1
      Controller/UidSetController.py
  3. 319 0
      Controller/UserController.py
  4. 4 2
      Service/TemplateService.py

+ 5 - 0
Ansjer/urls.py

@@ -110,6 +110,7 @@ urlpatterns = [
 
     # h获取验证码    # v2接口
     url(r'^v2/account/authcode$', UserController.v2authCodeView.as_view()),
+
     url(r'^v2/account/register$', UserController.v2registerView.as_view()),
     url(r'^v2/account/forgetCode$', UserController.v2forgetPwdCodeView.as_view()),
     url(r'^v2/account/resetPwdByCode$', UserController.v2resetPwdByCodeView.as_view()),
@@ -155,6 +156,10 @@ urlpatterns = [
     url(r'^wechat/authsign', UserController.wxAuthSignView.as_view()),
     # 分区分流
     path('Test', Test.Test.as_view()),
+    # 微信绑定的用户获取验证码
+    url(r'^oauth/authcode', UserController.OauthAuthCodeView.as_view()),
+    url(r'^oauth/perfect', UserController.OauthPerfectView.as_view()),
+
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),
     re_path('(?P<path>.*)', LogManager.errorPath),

+ 25 - 1
Controller/UidSetController.py

@@ -19,7 +19,7 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 
-from Model.models import UidSetModel, Device_User, Device_Info
+from Model.models import UidSetModel, Device_User, Device_Info,UidPushModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -66,6 +66,8 @@ class UidSetView(View):
         userID = tko.userID
         if operation == 'queryAll':
             return self.do_queryAll(request_dict, userID, response)
+        elif operation == 'adminQueryAll':
+            return self.do_admin_queryAll(request_dict, userID, response)
         elif operation == 'adminDelete':
             return self.do_admin_delete(request_dict, userID, response)
         elif operation == 'adminQuery':
@@ -88,6 +90,28 @@ class UidSetView(View):
         else:
             return response.json(0)
 
+    def do_admin_queryAll(self, request_dict, userID, response):
+            uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
+            print (uid_list)
+            id = request_dict.get('id', None)
+            uid_set_qs = UidPushModel.objects.filter(uid_set__id=id).values('addTime',
+                                                                            'appBundleId','app_type','lang','m_code','push_type','token_val','tz','uid_set',
+                                                                            'updTime','userID','userID__username'
+                                                                            , 'userID__userEmail', 'userID__NickName'
+                                                                            , 'userID__is_active', 'userID__phone'
+                                                                            , 'uid_set__channel', 'uid_set__uid'
+                                                                            , 'uid_set__detect_status'
+                                                                            ,'uid_set__detect_interval', 'uid_set__ucode'
+                                                                            , 'uid_set__version'
+                                                                            , 'uid_set__p2p_region'
+                                                                            ,'uid_set__cloud_vod', 'uid_set__tz'
+                                                                            , 'uid_set__video_code'
+                                                                            ,'uid_set__nickname'
+                                                                            ,'uid_set__ip'
+                                                                            )
+
+            return response.json(0, list(uid_set_qs))
+
         # 管理员删除
 
     def do_admin_delete(self, request_dict, userID, response):

+ 319 - 0
Controller/UserController.py

@@ -1526,3 +1526,322 @@ class wxAuthSignView(TemplateView):
             print('---')
             print(user_qs)
             return self.do_login(user_qs, response)
+
+# 获取验证码
+class OauthAuthCodeView(TemplateView):
+
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(OauthAuthCodeView, self).dispatch(*args, **kwargs)
+
+    @ratelimit(key='ip', rate='2/m')
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        lang = request.POST.get('lang', None)
+        if not lang:
+            lang = request.POST.get('language', None)
+        response = ResponseObject(lang)
+        request_dict = request.POST
+        phone = request_dict.get('phone', None)
+        if phone is not None:
+            was_limited = getattr(request, 'limited', False)
+            if was_limited is True:
+                return response.json(5)
+        return self.ValidationError(request_dict, response)
+
+    @ratelimit(key='ip', rate='2/m')
+    def get(self, request, *args, **kwargs):
+        # Device_User.objects.filter(userEmail='chanjunkai@163.com').delete()
+        request.encoding = 'utf-8'
+        lang = request.GET.get('lang', None)
+        if not lang:
+            lang = request.GET.get('language', None)
+        response = ResponseObject(lang)
+        was_limited = getattr(request, 'limited', False)
+        if was_limited is True:
+            return response.json(5)
+        request_dict = request.GET
+        return self.ValidationError(request_dict, response)
+
+    def ValidationError(self, request_dict, response):
+        email = request_dict.get('email', None)
+        phone = request_dict.get('phone', None)
+        country_code = request_dict.get('country_code', None)
+        sign_name = request_dict.get('sign_name', None)
+        token = request_dict.get('token', None)
+        print (token)
+        if email is not None:
+            email = email.strip()
+            # 阿里云的发送邮箱的调用方法
+            return self.aliyun_emailCode(email, response)
+
+            # return self.emailCode(email, response)
+        elif phone is not None:
+            phone = phone.strip()
+            if country_code is None:
+                return self.phoneCode(phone, response, sign_name)
+            else:
+                country_code = str(country_code.strip())
+                return self.phoneCodeV2(country_code, phone, response, sign_name)
+        else:
+            return response.json(444)
+
+    def emailCode(self, email, response):
+
+        dataValid = DataValid()
+        # 邮箱匹配
+        if dataValid.email_validate(email) is False:
+            return response.json(107)
+        reds = RedisObject()
+        identifyingCode = reds.get_data(key=email + '_OauthPerfect')
+        # 是否以获取邮箱验证码
+        if identifyingCode:
+            return response.json(89)
+        user_qs = Device_User.objects.filter(username=email)
+        email_qs = Device_User.objects.filter(userEmail=email)
+        # 邮箱用户是否已存在
+        if user_qs.exists():
+            return response.json(103)
+        elif email_qs.exists():
+            return response.json(103)
+        # 生成随机6位数
+        identifyingCode = RandomStr(6, True)
+        # 设置随机数缓存生命周期
+        send_data = TemplateService.email_message(type='register_code', language=response.lang)
+        ses = SesClassObject()
+        # 发送邮件
+        send_res = ses.send_email(
+            send_address_list=[email],
+            subject=send_data['title'],
+            body=send_data['body'].replace("{username}", email).replace("{captcha}",
+                                                                        str(identifyingCode))
+        )
+        if send_res is not True:
+            return response.json(44)
+        if reds.set_data(key=email + '_OauthPerfect', val=identifyingCode, expire=600) is not True:
+            return response.json(10, 'error')
+        return response.json(0)
+        # return response.json(0, {'identifyingCode': identifyingCode})
+
+    # 阿里云获取邮箱验证码
+    def aliyun_emailCode(self, email, response):
+        print('阿里云开始')
+        dataValid = DataValid()
+        # 邮箱匹配
+        if dataValid.email_validate(email) is False:
+            return response.json(107)
+        reds = RedisObject()
+        identifyingCode = reds.get_data(key=email + '_OauthPerfect')
+        # 是否以获取邮箱验证码
+        if identifyingCode:
+            return response.json(89)
+        user_qs = Device_User.objects.filter(username=email)
+        email_qs = Device_User.objects.filter(userEmail=email)
+        # 邮箱用户是否已存在
+        if user_qs.exists():
+            return response.json(103)
+        elif email_qs.exists():
+            return response.json(103)
+        # 生成随机6位数
+        identifyingCode = RandomStr(6, True)
+        # 设置随机数缓存生命周期
+        send_data = TemplateService.email_message(type='register_code', language=response.lang)
+        ses = SesClassObject()
+        # 发送邮件
+        send_res = ses.alyEmailCode(
+            send_address_list=[email],
+            subject=send_data['title'],
+            body=send_data['body'].replace("{username}", email).replace("{captcha}", str(identifyingCode))
+        )
+        if send_res is not True:
+            return response.json(44)
+        if reds.set_data(key=email + '_OauthPerfect', val=identifyingCode, expire=600) is not True:
+            return response.json(10, 'error')
+        return response.json(0)
+
+    def phoneCode(self, phone, response, sign_name):
+        dataValid = DataValid()
+        if dataValid.mobile_validate(phone) is not True:
+            return response.json(107)
+        reds = RedisObject()
+        reds_key = str(phone) + '_OauthPerfect'
+        identifyingCode = reds.get_data(key=reds_key)
+        reds_key_ttl = reds.get_ttl(key=reds_key)
+        if reds_key_ttl > 240 and identifyingCode:
+            # if identifyingCode :
+            return response.json(90)
+        user_qs = Device_User.objects.filter(username=phone)
+        phone_qs = Device_User.objects.filter(phone=phone)
+        if user_qs.exists() or phone_qs.exists():
+            return response.json(101)
+        identifyingCode = RandomStr(6, True)
+        # 发送手机验证码
+        aliSms = AliSmsObject()
+        if sign_name == 'zosi':
+            sign_ms = '周视'
+        else:
+            sign_ms = 'Ansjer'
+        res = aliSms.send_code_sms(phone=phone, code=identifyingCode, sign_name=sign_ms,
+                                   temp_msg='SMS_151600991')
+        print(res)
+        if res["Code"] == "OK":
+            if reds.set_data(key=reds_key, val=identifyingCode, expire=300) is not True:
+                # if reds.set_data(key=phone + '_identifyingCode', val=identifyingCode, expire=60) is not True:
+
+                return response.json(10, '生成缓存系统错误')
+            return response.json(0)
+        else:
+            return response.json(10, res["Message"])
+
+    def phoneCodeV2(self, country_code, phone, response, sign_name):
+        dataValid = DataValid()
+        if dataValid.mobile_validate(phone) is not True:
+            return response.json(107)
+        reds = RedisObject()
+        reds_key = str(phone) + '_OauthPerfect'
+        identifyingCode = reds.get_data(key=reds_key)
+        reds_key_ttl = reds.get_ttl(key=reds_key)
+        if reds_key_ttl > 240 and identifyingCode:
+            # if identifyingCode :
+            return response.json(90)
+        user_qs = Device_User.objects.filter(username=phone)
+        phone_qs = Device_User.objects.filter(phone=phone)
+        if user_qs.exists() or phone_qs.exists():
+            return response.json(101)
+        identifyingCode = RandomStr(6, True)
+        # 短信签名
+        # sign_name_dict = {
+        #     'ansjer':'Ansjer',
+        #     'zosi':'周视'
+        # }
+        sign_ms = ''
+        if country_code == '86':
+            # 国内短信推送模板
+            temp_msg = 'SMS_151600991'
+            rec_phone = phone
+            if sign_name == 'zosi':
+                sign_ms = '周视'
+            else:
+                sign_ms = 'Ansjer'
+        else:
+            # 国际短信推送模板
+            temp_msg = 'SMS_172165867'
+            rec_phone = country_code + phone
+            sign_ms = 'Ansjer'
+
+        # 发送手机验证码
+        aliSms = AliSmsObject()
+        res = aliSms.send_code_sms(phone=rec_phone, code=identifyingCode, sign_name=sign_ms,
+                                   temp_msg=temp_msg)
+        print(res)
+        if res["Code"] == "OK":
+            # if reds.set_data(key=reds_key, val=identifyingCode, expire=60) is not True:
+            if reds.set_data(key=reds_key, val=identifyingCode, expire=300) is not True:
+                return response.json(10, '生成缓存系统错误')
+            return response.json(0)
+        else:
+            return response.json(10, res["Message"])
+
+class OauthPerfectView(TemplateView):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(OauthPerfectView, self).dispatch(*args, **kwargs)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        lang = request_dict.get('lang')
+        if not lang:
+            lang = request_dict.get('language', None)
+        response = ResponseObject(lang)
+        was_limited = getattr(request, 'limited', False)
+        if was_limited is True:
+            return response.json(5)
+        return self.ValidationError(request_dict, response)
+
+    def post(self, request):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        lang = request_dict.get('lang')
+        if not lang:
+            lang = request_dict.get('language', None)
+        response = ResponseObject(lang)
+        was_limited = getattr(request, 'limited', False)
+        if was_limited is True:
+            return response.json(5)
+        return self.ValidationError(request_dict, response)
+
+    def ValidationError(self, request_dict, response):
+        phone = request_dict.get('phone', None)
+        email = request_dict.get('email', None)
+        password = request_dict.get('password', None)
+        authcode = request_dict.get('authcode', None)
+        token = request_dict.get('token', None)
+        print (token)
+        token = request_dict.get('token')
+        tko = TokenObject(token)
+        if password is None or authcode is None:
+            return response.json(444, 'password,authcode')
+        authcode = authcode.strip()
+        password = password.strip()
+        if phone is not None:
+            phone = phone.strip()
+            return self.do_phone(tko,phone, authcode, password, response)
+        elif email is not None:
+            email = email.strip()
+            return self.do_email(tko,email, authcode, password, response)
+        else:
+            return response.json(444, 'phone')
+
+    def do_email(self,tko, email, authcode, password, response):
+        data_valid = DataValid()
+        if data_valid.email_validate(email) is not True:
+            return response.json(105)
+        if data_valid.password_validate(password) is not True:
+            return response.json(109)
+
+        if tko.code == 0:
+            user_qs = Device_User.objects.filter(userID=tko.userID)
+        else:
+            return response.json(tko.code)
+        if not user_qs.exists():
+            return response.json(104)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=email + '_OauthPerfect')
+        if resetCode is False:
+            return response.json(90)
+        if authcode != resetCode:
+            return response.json(121)
+        # if not reds.set_data(key=email + '_forgetPwdResetCode', val=resetCode, expire=300):
+        #     return response.json(10, '生成缓存错误')
+        user_qs.update(userEmail=email,password=make_password(password))
+        if not reds.del_data(email + '_OauthPerfect'):
+            return response.json(10, '删除缓存失败')
+        return response.json(0)
+
+    def do_phone(self,tko, phone, authcode, password, response):
+        data_valid = DataValid()
+        if data_valid.mobile_validate(phone) is not True:
+            return response.json(100)
+        if data_valid.password_validate(password) is not True:
+            return response.json(109)
+
+        if tko.code == 0:
+            user_qs = Device_User.objects.filter(userID=tko.userID)
+        else:
+            return response.json(tko.code)
+        if not user_qs.exists():
+            return response.json(102)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=str(phone) + '_OauthPerfect')
+        print (resetCode)
+        if resetCode is False:
+            return response.json(90)
+        if authcode != resetCode:
+            return response.json(121)
+        # if not reds.set_data(key=phone + '_forgetPwdResetCode', val=resetCode, expire=300):
+        #     return response.json(10, '生成缓存错误')
+        user_qs.update(phone=phone,password=make_password(password))
+        if not reds.del_data(str(phone) + '_OauthPerfect'):
+            return response.json(10, '删除缓存失败')
+        return response.json(0)

+ 4 - 2
Service/TemplateService.py

@@ -60,14 +60,16 @@ class TemplateService:
             'deviceShare/confirm',
             'deviceShare/deleteUser',
             'equipment/delete',
-            'equipment/add',
             'equipment/query',
             'order/querylist',
             'detect/changeStatus',
             # 'notify/push',
             'equipment/flowUpdate',
             'wechat/authsign',
-            'user/initInfo'
+            'user/initInfo',
+            'wechat/perfect',
+            'oauth / perfect',
+            'oauth/authcode'
             # 'detect/queryInfo'
         ]
         return apiList