Prechádzať zdrojové kódy

更新用户选择地区等代码

locky 2 rokov pred
rodič
commit
38e1bb9014

+ 40 - 2
Controller/EquipmentManagerV3.py

@@ -6,6 +6,7 @@ import time
 
 import oss2
 import requests
+from django.db import transaction
 from django.db.models import Q
 from django.views.generic.base import View
 
@@ -18,6 +19,7 @@ from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidC
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
+from Service.EquipmentInfoService import EquipmentInfoService
 from Service.ModelService import ModelService
 
 
@@ -36,12 +38,13 @@ class EquipmentManagerV3(View):
 
     def validation(self, request_dict, request, operation):
         response = ResponseObject()
-        token = request_dict.get('token', None)
-        # 设备主键uid
 
         if operation == 'notLoginMainUserDevice':
             return self.not_login_do_mainUserDevice(request_dict, response)
+        elif operation == 'notLoginMainDelDevice':
+            return self.test_tool_del_device(request_dict, response)
 
+        token = request_dict.get('token', None)
         tko = TokenObject(token)
         if tko.code != 0:
             return response.json(tko.code)
@@ -1059,6 +1062,41 @@ class EquipmentManagerV3(View):
                 qs[0]['phone'] = NickName
         return response.json(0, qs)
 
+    @staticmethod
+    def test_tool_del_device(request_dict, response):
+        """
+        测试工具删除设备
+        @param request_dict: 请求数据
+        @request_dict user_id: 用户id
+        @request_dict uid: uid
+        @request_dict time_stamp: 时间戳
+        @request_dict time_stamp_token: 时间戳token
+        @param response: 响应
+        @return: response
+        """
+        user_id = request_dict.get('user_id')
+        uid = request_dict.get('uid')
+        time_stamp = request_dict.get('time_stamp', None)
+        time_stamp_token = request_dict.get('time_stamp_token', None)
+
+        if not all([user_id, uid, time_stamp, time_stamp_token]):
+            return response.json(444)
+
+        try:
+            # 时间戳token校验
+            if not CommonService.check_time_stamp_token(time_stamp_token, time_stamp):
+                return response.json(13)
+
+            with transaction.atomic():
+                Device_Info.objects.filter(userID_id=user_id, uid=uid).delete()
+                # 删除推送消息
+                for val in range(1, 8):
+                    EquipmentInfoService.get_equipment_info_model('', val). \
+                        filter(device_user_id=user_id, device_uid=uid).delete()
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, repr(e))
+
     def do_get_device_features(self, request_dict, response):
         uid = request_dict.get('uid', None)
 

+ 29 - 8
Controller/RegionController.py

@@ -285,22 +285,34 @@ class RegionView(View):
 
     @staticmethod
     def get_country_and_domain_name(request_dict, response):
+        """
+        获取国家和域名
+        @param request_dict: 请求数据
+        @request_dict lang: 语言
+        @request_dict app_bundle_id: app包id
+        @request_dict time_stamp: 时间戳
+        @request_dict time_stamp_token: 时间戳token
+        @param response: 响应
+        @return: response
+        """
         lang = request_dict.get('lang', None)
-        app_bundle_id = request_dict.get('app_bundle_id', 'com.ansjer.zccloud')  # AVSS不传app_bundle_id参数
+        app_bundle_id = request_dict.get('app_bundle_id', None)
         time_stamp = request_dict.get('time_stamp', None)
         time_stamp_token = request_dict.get('time_stamp_token', None)
 
         if not all([lang, app_bundle_id, time_stamp, time_stamp_token]):
             return response.json(444)
 
+        # AVSS不传app_bundle_id
+        is_app = True
+        if app_bundle_id is None:
+            app_bundle_id = 'com.ansjer.zccloud'
+            is_app = False
+
         try:
-            # 校验时间戳token
-            time_stamp_token = int(CommonService.decode_data(time_stamp_token))
-            time_stamp = int(time_stamp)
-            now_time = int(time.time())
-            distance = now_time - time_stamp
-            if time_stamp_token != time_stamp or distance > 60000 or distance < -60000:  # 为了全球化时间控制在一天内
-                return response.json(404)
+            # 时间戳token校验
+            if not CommonService.check_time_stamp_token(time_stamp_token, time_stamp):
+                return response.json(13)
 
             # 查询app名
             app_inf_qs = App_Info.objects.filter(appBundleId=app_bundle_id).values('appName')
@@ -323,6 +335,15 @@ class RegionView(View):
             else:
                 country_qs = country_qs.annotate(api=F('country__region__api'))
             country_qs = country_qs.values('country_id', 'country_name', 'api', 'push_api').order_by('country_id')
+
+            # app中国返回美洲域名
+            if is_app:
+                for country in country_qs:
+                    if country['country_id'] == 1:
+                        country['api'] = 'https://www.dvema.com/'
+                        country['push_api'] = 'https://push.dvema.com/'
+                        break
+
             return response.json(0, list(country_qs))
         except Exception as e:
             return response.json(500, repr(e))

+ 3 - 1
Controller/RegionCountryController.py

@@ -8,6 +8,7 @@ from Model.models import Device_User
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 
+
 class RegionCountryView(View):
 
     def get(self, request, *args, **kwargs):
@@ -41,6 +42,7 @@ class RegionCountryView(View):
         if not user:
             return response.json(309)
 
-        user.region_country=number
+        user.region_country = number
+        user.region_status = True
         user.save()
         return response.json(0)

+ 26 - 12
Controller/UserController.py

@@ -1119,7 +1119,6 @@ class v2registerView(TemplateView):
             return self.do_login(email_qs, response)
 
 
-# 验证码注册v3
 class v3registerView(TemplateView):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -1136,6 +1135,19 @@ class v3registerView(TemplateView):
         return self.validates(request_dict)
 
     def validates(self, request_dict):
+        """
+        V3注册接口
+        @param request_dict: 请求数据
+        @request_dict phone: 手机
+        @request_dict email: 邮箱
+        @request_dict password: 密码
+        @request_dict authcode: 验证码
+        @request_dict lang: 语言
+        @request_dict unique: 手机唯一标识
+        @request_dict number: 国家id号
+        @request_dict region_status: 地区选择状态
+        @return: response
+        """
         phone = request_dict.get('phone', None)
         email = request_dict.get('email', None)
         password = request_dict.get('password', None)
@@ -1143,9 +1155,11 @@ class v3registerView(TemplateView):
         lang = request_dict.get('lang', None)
         unique = request_dict.get('unique', None)
         number = request_dict.get('number', None)
+        region_status = request_dict.get('region_status', None)
 
         if unique:
             delete_local_account(unique)
+        region_status = int(region_status) if region_status else 0
         response = ResponseObject(lang)
         # 解密
         try:
@@ -1183,20 +1197,19 @@ class v3registerView(TemplateView):
         except Exception as e:
             return response.json(121)
         else:
-            if not lang:
-                lang = request_dict.get('language', None)
             if password is None:
                 return response.json(444, 'password')
             if authcode is None:
                 return response.json(444, 'identifyingCode')
+
             if phone is not None:
-                return self.do_phone_register(phone, password, authcode, number, response)
+                return self.do_phone_register(phone, password, authcode, number, region_status, response)
             elif email is not None:
-                return self.do_email_register(email, password, authcode, number, response)
+                return self.do_email_register(email, password, authcode, number, region_status, response)
             else:
                 return response.json(444, 'phone or email')
 
-    def do_phone_register(self, phone, password, authcode, number, response):
+    def do_phone_register(self, phone, password, authcode, number, region_status, response):
         data_valid = DataValid()
         if data_valid.mobile_validate(phone) is not True:
             return response.json(100)
@@ -1223,11 +1236,11 @@ class v3registerView(TemplateView):
                 "userID": CommonService.getUserID(μs=False, setOTAID=True),
                 "is_active": True,
                 "user_isValid": True,
+                "region_status": region_status
             }
             if number:
                 create_data["region_country"] = number
-
-            users = Device_User.objects.create(**create_data)
+            Device_User.objects.create(**create_data)
 
         except Exception as e:
             errorInfo = traceback.format_exc()
@@ -1266,7 +1279,7 @@ class v3registerView(TemplateView):
         res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
         return response.json(0, res)
 
-    def do_email_register(self, email, password, authcode, number, response):
+    def do_email_register(self, email, password, authcode, number, region_status, response):
         data_valid = DataValid()
         if data_valid.email_validate(email) is not True:
             return response.json(105)
@@ -1294,10 +1307,11 @@ class v3registerView(TemplateView):
                 "userID": CommonService.getUserID(μs=False, setOTAID=True),
                 "is_active": True,
                 "user_isValid": True,
+                "region_status": region_status
             }
             if number:
                 create_data["region_country"] = number
-            users = Device_User.objects.create(**create_data)
+            Device_User.objects.create(**create_data)
 
         except Exception as e:
             errorInfo = traceback.format_exc()
@@ -2021,7 +2035,7 @@ class v3LoginView(TemplateView):
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request_dict = request.POST
-        language = request_dict.get('language', 'en')
+        language = request_dict.get('lang', 'en')
         response = ResponseObject(language)
         was_limited = getattr(request, 'limited', False)
         if was_limited is True:
@@ -4066,7 +4080,7 @@ class LocalUserView(View):
         return self.validate(request_dict, operation)
 
     def validate(self, request_dict, operation):
-        language = request_dict.get('language', None)
+        language = request_dict.get('lang', None)
         response = ResponseObject(lang=language)
         if operation == 'login':
             return self.do_local_login(request_dict, response)

+ 61 - 44
Controller/UserManger.py

@@ -1,6 +1,3 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-import logging
 import os
 import traceback
 
@@ -8,15 +5,14 @@ import boto3
 import botocore
 from botocore import client
 import simplejson as json
-from django.core.files.storage import FileSystemStorage
 from django.http import HttpResponse
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView, View
 
-from Ansjer.config import BASE_DIR, SERVER_TYPE, ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, AVATAR_BUCKET
+from Ansjer.config import BASE_DIR, ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, AVATAR_BUCKET
 from Ansjer.config import SERVER_DOMAIN
-from Model.models import Role, Device_User, UserOauth2Model, UserExModel, CountryLanguageModel
+from Model.models import Role, Device_User, UserOauth2Model, UserExModel, CountryLanguageModel, LanguageModel
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -24,7 +20,6 @@ from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 
 
-# http://192.168.136.40:8077/account/showUserMore?token=test
 class showUserMoreView(TemplateView):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -32,58 +27,80 @@ class showUserMoreView(TemplateView):
 
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
-        token = request.POST.get('token', None)
-
-        return self.ValidationError(token)
+        return self.validation(request.POST)
 
     def get(self, request, *args, **kwargs):
         request.encoding = 'gb2312'
-        token = request.GET.get('token', None)
+        return self.validation(request.GET)
 
-        return self.ValidationError(token)
-
-    def ValidationError(self, token):
+    def validation(self, request_dict):
         response = ResponseObject()
+        token = request_dict.get('token', None)
+        lang = request_dict.get('lang', 'en')
+
         tko = TokenObject(token)
         response.lang = tko.lang
         if tko.code != 0:
             return response.json(tko.code)
-        userID = tko.userID
-        if not userID:
+        user_id = tko.userID
+        if not user_id:
             return response.json(104)
-        return self.showUserMore(userID, response)
 
-    def showUserMore(self, userID, response):
-        User = Device_User.objects.filter(userID=userID)
-        if not User.exists():
+        return self.show_user_more(user_id, lang, response)
+
+    @staticmethod
+    def show_user_more(user_id, lang, response):
+        """
+        获取用户完整信息
+        @param user_id: 用户id
+        @param lang: 语言
+        @param response: 响应
+        @return: response
+        """
+        device_user_qs = Device_User.objects.filter(userID=user_id)
+        if not device_user_qs.exists():
             return response.json(104)
-        sqlDict = CommonService.qs_to_dict(User)
-        for k, v in enumerate(sqlDict["datas"]):
-            sqlDict['datas'][k]['fields'].pop('password')
-            userIconPath = sqlDict['datas'][k]['fields']['userIconPath']
-            if userIconPath:
-                if userIconPath.find('static/') != -1:
-                    userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
-                    userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
-                    sqlDict['datas'][k]['fields']['userIconUrl'] = userIconUrl
-            if len(v['fields']['role']):
-                roleName = ModelService.getRole(rid=v['fields']['role'][0])
-                sqlDict["datas"][k]['fields']['rolename'] = roleName
-            region_country = sqlDict["datas"][k]['fields']['region_country']
-            if not region_country == 0:
-                country_qs = CountryLanguageModel.objects.filter(country_id=region_country).values(
-                    'country__region__api')
-                sqlDict["datas"][k]['fields']['api'] = country_qs[0]['country__region__api']
-            else:
-                sqlDict["datas"][k]['fields']['api'] = ''
+        try:
+            sqlDict = CommonService.qs_to_dict(device_user_qs)
+            for k, v in enumerate(sqlDict["datas"]):
+                sqlDict['datas'][k]['fields'].pop('password')
+                userIconPath = sqlDict['datas'][k]['fields']['userIconPath']
+                region_status = sqlDict['datas'][k]['fields']['region_status']
+                if userIconPath:
+                    if userIconPath.find('static/') != -1:
+                        userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
+                        userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
+                        sqlDict['datas'][k]['fields']['userIconUrl'] = userIconUrl
+
+                # 确认地区字段和当前地区
+                sqlDict['datas'][k]['fields']['region_status'] = 1 if region_status else 0
+                sqlDict['datas'][k]['fields']['region'] = ''
+                if region_status:
+                    region_country = sqlDict['datas'][k]['fields']['region_country']
+                    language_qs = LanguageModel.objects.filter(lang=lang).values('id')
+                    region_qs = CountryLanguageModel.objects.filter(country_id=region_country,
+                                                                    language_id=language_qs[0]['id']).values('country_name')
+                    sqlDict['datas'][k]['fields']['region'] = region_qs[0]['country_name'] if region_qs.exists() else ''
+
+                if len(v['fields']['role']):
+                    roleName = ModelService.getRole(rid=v['fields']['role'][0])
+                    sqlDict["datas"][k]['fields']['rolename'] = roleName
+                region_country = sqlDict["datas"][k]['fields']['region_country']
+                if not region_country == 0:
+                    country_qs = CountryLanguageModel.objects.filter(country_id=region_country).values(
+                        'country__region__api')
+                    sqlDict["datas"][k]['fields']['api'] = country_qs[0]['country__region__api']
+                else:
+                    sqlDict["datas"][k]['fields']['api'] = ''
 
-        # 增加oauth2关联数据
-        ua_qs = UserOauth2Model.objects.filter(userID_id=userID).values_list('authType', flat=True)
-        sqlDict["oauth2"] = list(ua_qs)
-        return response.json(0, sqlDict)
+            # 增加oauth2关联数据
+            ua_qs = UserOauth2Model.objects.filter(userID_id=user_id).values_list('authType', flat=True)
+            sqlDict['oauth2'] = list(ua_qs)
+            return response.json(0, sqlDict)
+        except Exception as e:
+            return response.json(500, repr(e))
 
 
-# http://192.168.136.40:8077/account/perfectUserInfo?token=test&content={"NickName":"333"}
 class perfectUserInfoView(TemplateView):
     # 完善个人信息
     @method_decorator(csrf_exempt)

+ 2 - 1
Model/models.py

@@ -184,7 +184,8 @@ class Device_User(AbstractBaseUser):
     fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
     is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户')  # False:账号登录,1:本地登录
     subscribe_email = models.SmallIntegerField(default=0, verbose_name=u'是否订阅营销邮件')  # 0:未订阅,1:订阅,2:不订阅
-    region_country = models.IntegerField(blank=True, default=0, verbose_name='地区表唯一标识')
+    region_country = models.IntegerField(blank=True, default=0, verbose_name='关联tb_country表id')
+    region_status = models.BooleanField(blank=True, default=False, verbose_name='地区选择状态')  # 0:未选, 1:已选
     objects = UserManager()
 
     USERNAME_FIELD = 'userID'  # 必须有一个唯一标识