浏览代码

添加邮件订阅功能

tanghongbin 4 年之前
父节点
当前提交
d2899368dc
共有 3 个文件被更改,包括 67 次插入19 次删除
  1. 3 0
      Ansjer/urls.py
  2. 63 19
      Controller/UserController.py
  3. 1 0
      Model/models.py

+ 3 - 0
Ansjer/urls.py

@@ -235,6 +235,9 @@ urlpatterns = [
     url(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
     url(r'^account/updateUserCountry', UserController.updateUserCountry),
 
+    # 订阅邮件
+    url(r'^account/subscribe$', UserController.SubscribeEmailView.as_view()),
+
     # app 设备消息模板
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),

+ 63 - 19
Controller/UserController.py

@@ -1703,6 +1703,7 @@ class v3LoginView(TemplateView):
     def validates(self, request_dict, response):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
+        subscribe = request_dict.get('subscribe', None)
         if not username or not password:
             return response.json(111)
         username = username.strip()
@@ -1734,34 +1735,38 @@ class v3LoginView(TemplateView):
         else:
             data_valid = DataValid()
             if data_valid.email_validate(username):
-                return self.do_email_login(username, password, response)
+                return self.do_email_login(username, password, response, subscribe)
             elif data_valid.mobile_validate(username):
-                return self.do_phone_login(username, password, response)
+                return self.do_phone_login(username, password, response, subscribe)
             elif data_valid.name_validate(username):
-                return self.do_name_login(username, password, response)
+                return self.do_name_login(username, password, response, subscribe)
             else:
                 return response.json(107)
 
-    def do_email_login(self, email, password, response):
+    def do_email_login(self, email, password, response, subscribe):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, response)
+        return self.valid_login(user_qs, password, response, subscribe)
 
-    def do_phone_login(self, phone, password, response):
+    def do_phone_login(self, phone, password, response, subscribe):
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone), is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, response)
+        return self.valid_login(user_qs, password, response, subscribe)
 
-    def do_name_login(self, username, password, response):
+    def do_name_login(self, username, password, response, subscribe):
         user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username),
                                              is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, response)
+        return self.valid_login(user_qs, password, response, subscribe)
 
-    def valid_login(self, user_qs, password, response):
+    def valid_login(self, user_qs, password, response, subscribe):
         if not user_qs.exists():
             return response.json(104)
         # users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
         #                        'phone', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
+        if subscribe:
+            user_qs.update(subscribe_email=subscribe)
+
         users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
-                               'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key')[0]
+                               'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key',
+                               'subscribe_email')[0]
         if not check_password(password, users['password']):
             return response.json(111)
         userID = users['userID']
@@ -1794,6 +1799,7 @@ class v3LoginView(TemplateView):
             # res['fingerprint_enable'] = users['fingerprint_enable']
             # 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 ''
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -1931,6 +1937,7 @@ class InitInfoView(View):
         else:
             return response.json(444)
 
+
 # 获取验证码
 class verifyAuthcode(TemplateView):
 
@@ -2173,7 +2180,8 @@ class wxPerfectView(TemplateView):
                     'com.ansjer.loocamccloud': {'appid': 'wx9f6d6ce63f85b367',
                                                 'secret': 'fe495884cd24637f1ae516c7f53d1b97', },
                     'com.ansjer.zccloud': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
-                    'com.ansjer.customizede': {'appid':'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
+                    'com.ansjer.customizede': {'appid': 'wx2a9f5ef9baf2760f',
+                                               'secret': '5d38c7079676463149ffea593c58f2ed'},
                     # android
                     'com.ansjer.zccloud_ab': {'appid': 'wx2a9f5ef9baf2760f',
                                               'secret': '5d38c7079676463149ffea593c58f2ed'},
@@ -3303,7 +3311,8 @@ class v3LoginByFingerprintView(View):
                     return response.json(104)
                 else:
                     users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
-                               'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key')[0]
+                                           'phone', 'password', 'userIconPath', 'fingerprint_enable',
+                                           'fingerprint_key')[0]
                     if users['fingerprint_enable'] == 0:
                         return response.json(112)
                     else:
@@ -3331,7 +3340,8 @@ class v3LoginByFingerprintView(View):
                             res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
                             res['phone'] = users['phone'] if users['phone'] is not None else ''
                             res['fingerprint_enable'] = users['fingerprint_enable']
-                            res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
+                            res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'],
+                                                                               start=2)
                             return response.json(0, res)
                         else:
                             return response.json(tko.code)
@@ -3420,7 +3430,8 @@ class AppleAuthLogin(View):
 
             if key_object:
                 try:
-                    claims = jwt.decode(identity_token, key=key_object, verify=True, algorithms=[alg], audience=app_bundle_id)
+                    claims = jwt.decode(identity_token, key=key_object, verify=True, algorithms=[alg],
+                                        audience=app_bundle_id)
                     unionID = claims['sub']
                     print(claims)
                     user_extend_qs = UserOauth2Model.objects.filter(unionID=unionID, authType=2)
@@ -3528,8 +3539,8 @@ class LocalUserView(View):
         request.encoding = 'utf-8'
         request_dict = request.POST
         operation = kwargs.get('operation', None)
-        print('start_time='+ str((time.time())))
-        ip=CommonService.get_ip_address(request)
+        print('start_time=' + str((time.time())))
+        ip = CommonService.get_ip_address(request)
         print('end_time=' + str((time.time())))
         return self.validate(request_dict, operation)
 
@@ -3619,6 +3630,40 @@ class LocalUserView(View):
             return self.do_login(user_qs, response)
 
 
+class SubscribeEmailView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validate(request_dict)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        return self.validate(request_dict)
+
+    def validate(self, request_dict):
+        token = request_dict.get('token', None)
+        lang = request_dict.get('lang', None)
+        token = TokenObject(token)
+
+        response = ResponseObject(lang=lang)
+        if token.code != 0:
+            return response.json(token.code)
+
+        status = request_dict.get('subscribe', None)
+        if status is None:
+            return response.json(444)
+
+        status = int(status)
+        user_qs = Device_User.objects.filter(userID=token.userID)
+        if user_qs.exists():
+            user_qs.update(subscribe_email=status)
+            return response.json(0)
+        else:
+            return response.json(104)
+
+
 def delete_local_account(username):
     user_qs = Device_User.objects.filter(username=username)
     print(user_qs)
@@ -3633,7 +3678,6 @@ def updateUserCountry(request):
     country_ip_qs = CountryIPModel.objects.filter(status=0)[0: 100]
     if country_ip_qs.exists():
         country_ip_qs = country_ip_qs.values()
-        ids = []
         redisObject = RedisObject(db=6)
         for country_ip in country_ip_qs:
             key = 'ip_country_{ip}'.format(ip=country_ip['ip'])
@@ -3650,4 +3694,4 @@ def updateUserCountry(request):
             # ids.append(country_ip['id'])
         # CountryIPModel.objects.filter(id__in=tuple(ids)).update(status=1)
     response = ResponseObject()
-    return response.json(0)
+    return response.json(0)

+ 1 - 0
Model/models.py

@@ -150,6 +150,7 @@ class Device_User(AbstractBaseUser):
     fingerprint_enable = models.SmallIntegerField(default=0, verbose_name=u'是否开启了指纹登录') # 0:未开启,1:已开启
     fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
     is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户')
+    subscribe_email = models.SmallIntegerField(default=0, verbose_name=u'是否订阅营销邮件')  # 0:未订阅,1:订阅,2:不订阅
     objects = UserManager()
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识