| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | import jsonfrom django.db.models import Ffrom django.http import QueryDictfrom django.views import Viewfrom Ansjer.config import LOGGERfrom Model.models import DeviceVersionInfo, CountryAPN, LanguageModel, CountryLanguageModel, CountryModelfrom Object.Enums.RedisKeyConstant import RedisKeyConstantfrom Object.RedisObject import RedisObjectfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.CommonService import CommonServiceclass APNConfigView(View):    def get(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation')        return self.validation(request.GET, request, operation)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation')        return self.validation(request.POST, request, operation)    def validation(self, request_dict, request, operation):        response = ResponseObject('en')        tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'))        LOGGER.info(f'APNConfigView -- tko: {tko.code}, request_dict: {request_dict}')        if tko.code != 0:            return response.json(tko.code)        response.lang = tko.lang        userID = tko.userID        if operation == 'APNConfigList':            return self.get_apn_config(request_dict, response)        elif operation == 'CountryCodeList':            return self.get_country_code_list(request_dict, response)        else:            return response.json(414)    @staticmethod    def get_apn_config(request_dict, response):        # 从请求字典中获取国家代码        country_code = request_dict.get('countryCode')        # 检查 country_code 是否存在,如果不存在,返回错误代码444        if not country_code:            return response.json(444)        # 查询数据库,获取与国家代码匹配的 APN 配置信息        country_apn_qs = CountryAPN.objects.filter(iso=country_code).values('username', 'password',                                                                            apnName=F('apn_name'),                                                                            apnAddress=F('apn_address'),                                                                            authType=F('auth_type'))        return response.json(0, list(country_apn_qs))    @staticmethod    def get_country_code_list(request_dict, response):        lang = request_dict.get('lang', 'en')        # 获取语言 ID        language = LanguageModel.objects.filter(lang=lang).first()        if not language:            language = LanguageModel.objects.filter(lang='en').first()        iso_list = CountryAPN.objects.all().values("iso")        # 查询tb_country_language和tb_country,获取国家名称和国家iso2代码        countries = CountryLanguageModel.objects.filter(language=language,                                                        country__country_code__in=iso_list).select_related(            'country').order_by(            'country__country_name')        # 返回国家名和对应的 country_code        country_iso_list = [{            'countryName': country.country_name,            'countryCode': country.country.country_code        } for country in countries]        return response.json(0, country_iso_list)
 |