aidog_tools.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import zipfile
  2. import tempfile
  3. import shutil
  4. import random
  5. import os
  6. import jwt
  7. import traceback
  8. from django.http import HttpResponse,JsonResponse
  9. SECRET_KEY='#tdfnrcn1s610h4*csa2-p+=lfqz-ol+=uo$+n2sa'
  10. #构建封装用户信息字典
  11. #2025-5-27
  12. #Author Feng
  13. def _build_user_info(user):
  14. return {
  15. "user_name": user.user_name,
  16. "coin": user.coin,
  17. "isRegUser": bool(getattr(user, 'isRegUser', 0)),
  18. "mobile": user.mobile,
  19. "email": user.email,
  20. "level": user.level,
  21. "uuid": user.uuid,
  22. "registration_time": user.registration_time.isoformat() if hasattr(user.registration_time, 'isoformat') else str(user.registration_time)
  23. }
  24. #生成指定范围内的随机数
  25. #2025-5-27
  26. #Author Feng
  27. def generate_random_number(start, end):
  28. return random.randint(start, end)
  29. # 统一的错误响应处理
  30. def handle_error(error_message):
  31. # 打印错误堆栈信息到日志或控制台
  32. traceback.print_exc()
  33. return JsonResponse({"status": "error", "message": error_message}, status=500)
  34. def model_to_dict_without_id(model_instance):
  35. """将 Django 模型实例转换为字典,并移除 'id' 字段"""
  36. if model_instance:
  37. model_dict = model_instance.__dict__.copy()
  38. model_dict.pop("id", None) # 删除 id 字段
  39. model_dict.pop("_state", None) # 删除 Django 内部字段
  40. return model_dict
  41. return {}
  42. # # 生成access_token
  43. # def generate_access_token(user_id,expiration_time):
  44. #
  45. # payload = {
  46. # 'user_id': user_id,
  47. # 'exp': expiration_time
  48. # }
  49. # return jwt.encode(payload, SECRET_KEY, algorithm='HS256')
  50. #
  51. #
  52. # # 生成login_token
  53. # def generate_login_token(user_id,expiration_time):
  54. # payload = {
  55. # 'user_id': user_id,
  56. # 'exp': expiration_time
  57. # }
  58. #
  59. # return jwt.encode(payload, SECRET_KEY, algorithm='HS256')
  60. #解压zip文件中的wav音频到指定目录
  61. # 2025/4/01
  62. # author Feng
  63. def extract_wav_from_zip(zip_file, target_directory):
  64. temp_dir = tempfile.mkdtemp()
  65. try:
  66. # 解压zip到临时目录
  67. with zipfile.ZipFile(zip_file, 'r') as zip_ref:
  68. zip_ref.extractall(temp_dir)
  69. # Find wav file in the extracted directory
  70. wav_files = []
  71. for root, _, files in os.walk(temp_dir):
  72. for file in files:
  73. if file.lower().endswith('.wav'):
  74. wav_files.append(os.path.join(root, file))
  75. if not wav_files:
  76. return None
  77. # Use the first wav file found
  78. wav_file_path = wav_files[0]
  79. # Copy to target directory with a specific name
  80. target_path = os.path.join(target_directory, 'voice.wav')
  81. shutil.copy2(wav_file_path, target_path)
  82. return target_path
  83. finally:
  84. # Clean up temp directory
  85. shutil.rmtree(temp_dir)
  86. #验证访问令牌的有效性
  87. def validate_access_token(access_token):
  88. # 验证访问令牌的有效性
  89. try:
  90. decoded_token = jwt.decode(access_token, SECRET_KEY, algorithms=['HS256'])
  91. return decoded_token
  92. except jwt.ExpiredSignatureError:
  93. return JsonResponse({
  94. "status": "error",
  95. "code": 601,
  96. "message": "access_token expired, please refresh"
  97. })
  98. except jwt.InvalidTokenError:
  99. return JsonResponse({
  100. "status": "error",
  101. "code": 400,
  102. "message": "invalid access_token"
  103. })