api_key_view.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # coding=utf-8
  2. """
  3. 平台API Key管理视图
  4. 提供API Key的CRUD操作
  5. """
  6. from rest_framework.views import APIView
  7. from django.utils.translation import gettext_lazy as _
  8. from common.auth import TokenAuth
  9. from common.log.log import log
  10. from common.result import result
  11. from models_provider.services import platform_api_key_service
  12. class ApiKeyView(APIView):
  13. """平台API Key管理"""
  14. authentication_classes = [TokenAuth]
  15. def get(self, request):
  16. """获取用户的API Key列表"""
  17. keys = platform_api_key_service.get_user_api_keys(request.user)
  18. data = []
  19. for k in keys:
  20. data.append({
  21. "id": str(k.id),
  22. "api_key_prefix": k.api_key_prefix,
  23. "name": k.name or "未命名",
  24. "status": k.status,
  25. "last_used_at": k.last_used_at,
  26. "create_time": k.create_time,
  27. })
  28. return result.success(data)
  29. @log(menu='api_key', operate='Create API Key',
  30. get_operation_object=lambda r, k: {'name': r.data.get('name', '未命名')})
  31. def post(self, request):
  32. """创建API Key(完整密钥仅返回一次)"""
  33. name = request.data.get('name')
  34. try:
  35. key_data = platform_api_key_service.create_api_key(request.user, name=name)
  36. return result.success(key_data)
  37. except ValueError as e:
  38. return result.error(str(e))
  39. class ApiKeyOperateView(APIView):
  40. """单个API Key操作"""
  41. authentication_classes = [TokenAuth]
  42. def put(self, request, key_id):
  43. """更新API Key状态"""
  44. status_val = request.data.get('status')
  45. try:
  46. platform_api_key_service.update_api_key_status(key_id, request.user, status_val)
  47. return result.success(None)
  48. except ValueError as e:
  49. return result.error(str(e))
  50. def delete(self, request, key_id):
  51. """删除API Key"""
  52. try:
  53. platform_api_key_service.delete_api_key(key_id, request.user)
  54. return result.success(None)
  55. except ValueError as e:
  56. return result.error(str(e))