BabyController.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : BabyController.py
  4. @Time : 2024-10-7 14:37:30
  5. @Author : peng
  6. @Email :
  7. @Software: PyCharm
  8. """
  9. import json
  10. import time
  11. from django.core.exceptions import ObjectDoesNotExist
  12. from django.db import transaction
  13. from django.db.models import F, Q, Count
  14. from django.views import View
  15. from Ansjer.cn_config.config_formal import SECRET_ACCESS_KEY, ACCESS_KEY_ID, REGION_NAME
  16. from Object.AWS.AmazonS3Util import AmazonS3Util
  17. from Roomumy.models import BabyUser
  18. from Object.ResponseObject import ResponseObject
  19. from Service.CommonService import CommonService
  20. class BabyView(View):
  21. def get(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. return self.validation(request.GET, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. operation = kwargs.get('operation')
  28. return self.validation(request.POST, request, operation)
  29. def validation(self, request_dict, request, operation):
  30. token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
  31. if token_code != 0:
  32. return response.json(token_code)
  33. if operation == 'addOrEdit': # 获取宝宝信息
  34. return self.add_or_edit_baby(request, request_dict, user_id, ResponseObject('cn'))
  35. elif operation == 'query': # 获取宝宝信息
  36. return self.query_baby_info(request_dict, user_id, ResponseObject('cn'))
  37. else:
  38. return response.json(414)
  39. @classmethod
  40. def add_or_edit_baby(cls, request, request_dict, user_id, response):
  41. """
  42. 添加或修改宝宝信息
  43. @param request_dict: 请求参数
  44. @param request: 请求
  45. @param user_id: 用户id
  46. @request_dict device_id: 设备id
  47. @request_dict baby_id: 宝宝id
  48. @request_dict nick_name: 昵称
  49. @request_dict sex: 性别
  50. @request_dict birthday: 生日
  51. @request_dict icon: 头像
  52. @request_dict is_default: 是否默认
  53. @param response: 响应对象
  54. @return: response
  55. """
  56. device_id = request_dict.get('device_id', None)
  57. baby_id = request_dict.get('baby_id', None)
  58. nick_name = request_dict.get('nick_name', None)
  59. sex = request_dict.get('sex', None)
  60. birthday = request_dict.get('birthday', None)
  61. icon = request.FILES.get('icon', None)
  62. is_default = request_dict.get('is_default', None)
  63. if not all([nick_name, sex, birthday, is_default]):
  64. return response.json(404)
  65. now_time = int(time.time())
  66. try:
  67. with transaction.atomic():
  68. if baby_id:
  69. BabyUser.objects.get(id=baby_id, user_id=user_id).update(is_default=is_default, birthday=birthday,
  70. nick_name=nick_name, sex=sex,
  71. device_id=device_id, updated_time=now_time)
  72. else:
  73. baby_qs = BabyUser.objects.create(user_id=user_id, is_default=is_default, birthday=birthday,
  74. nick_name=nick_name, sex=sex, device_id=device_id,
  75. created_time=now_time, updated_time=now_time)
  76. baby_id = baby_qs.id
  77. if icon:
  78. bucket = "ansjerfilemanager"
  79. s3_obj = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
  80. s3_url = 'https://{}.s3.{}.amazonaws.com.cn/'.format(bucket, REGION_NAME)
  81. icon_path = 'Roomumy/icon_{}.jpg'.format(baby_qs.id)
  82. s3_obj.upload_file_obj(
  83. bucket,
  84. icon_path,
  85. icon,
  86. {"ContentType": icon.content_type, "ACL": "public-read"},
  87. )
  88. icon_url = s3_url + icon_path
  89. BabyUser.objects.get(id=baby_id, user_id=user_id).update(icon_url=icon_url)
  90. return response.json(0)
  91. except Exception as e:
  92. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  93. @classmethod
  94. def query_baby_info(cls, request_dict, user_id, response):
  95. """
  96. 获取宝宝信息
  97. @param request_dict: 请求参数
  98. @param user_id: 用户id
  99. @request_dict baby_id: 宝宝id
  100. @param response: 响应对象
  101. @return: response
  102. """
  103. baby_id = request_dict.get('baby_id', None)
  104. try:
  105. baby_qs = BabyUser.objects.filter(user_id=user_id)
  106. if baby_id:
  107. baby_qs = baby_qs.filter(baby_id=baby_id)
  108. count = baby_qs.count()
  109. baby_qs = baby_qs.values('nick_name', 'sex', 'birthday', 'icon_url', 'device_id', 'is_default')
  110. return response.json(0, {'total': count, 'baby_list': list(baby_qs)})
  111. except Exception as e:
  112. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))