def post(request): result = Result() service_id = request.POST.get('service_id') if not service_id: result.code = CODE_SYS_TIPS result.message = "service_id can't be empty" return JsonResponse(result.serializer()) service_name = request.POST.get('service_name') if service_name and not re.match("^[A-Za-z]+(_[0-9]+)?$", service_name): result.code = CODE_SYS_TIPS result.message = "service_name format error" return JsonResponse(result.serializer()) if service_name: service_name = service_name.lower() domain = request.POST.get('domain') port = request.POST.get('port') service_uri = request.POST.get('service_uri') meta = request.POST.get('meta') status = request.POST.get('status') service = Service() service.__dict__ = cache.get(create_key(CACHE_SERVICE, service_id)) # 修改标记 update_flag = 0 if service_name and service.service_name != service_name: update_flag += 1 service.service_name = service_name elif domain and service.domain != domain: update_flag += 1 service.domain = domain elif port and service.port != int(port): update_flag += 1 service.port = port elif service_uri and service.service_uri != service_uri: update_flag += 1 service.service_uri = service_uri elif meta and service.meta != meta: update_flag += 1 service.meta = meta elif status and service.status != int(status): update_flag += 1 service.status = status if update_flag == 0: result.code = CODE_SYS_TIPS result.message = "nothing to be updated" return JsonResponse(result.serializer()) language = request.POST.get('language') language = language if not language else 'EN' result = Result() try: with transaction.atomic(): count = Service.objects.filter(id=service_id).update(service_name=service.service_name, domain=service.domain, port=service.port, service_uri=service.service_uri, meta=service.meta, status=service.status) service_dict = ServiceSerializer(service).data cache.set(create_key(CACHE_SERVICE, service.id), service_dict, timeout=None) cache.set(create_key(CACHE_SERVICE_NAME, service_name), service_dict, timeout=None) result.data = count except Exception as e: log.error(e) result.code = CODE_SYS_DB_ERROR result.message = get_error_message(result.code, language) return JsonResponse(result.serializer())