12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import json
- from django.db.models import F
- from django.http import QueryDict
- from django.views import View
- from Ansjer.config import LOGGER
- from Model.models import DeviceVersionInfo, CountryAPN, LanguageModel, CountryLanguageModel, CountryModel
- from Object.Enums.RedisKeyConstant import RedisKeyConstant
- from Object.RedisObject import RedisObject
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Service.CommonService import CommonService
- class 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)
|