78 lines
1.9 KiB
Python
78 lines
1.9 KiB
Python
import uuid
|
||
from rest_framework.response import Response
|
||
from rest_framework import status
|
||
|
||
|
||
def convert_to_uuid(pk_str):
|
||
"""
|
||
将字符串转换为UUID格式
|
||
|
||
Args:
|
||
pk_str: 字符串形式的UUID
|
||
|
||
Returns:
|
||
转换后的UUID对象或None
|
||
|
||
Raises:
|
||
ValueError: 如果字符串不是有效的UUID格式
|
||
"""
|
||
if isinstance(pk_str, uuid.UUID):
|
||
return pk_str
|
||
|
||
pk_str = pk_str.strip()
|
||
|
||
# 处理没有连字符的UUID
|
||
if '-' not in pk_str and len(pk_str) == 32:
|
||
pk_with_hyphens = f"{pk_str[0:8]}-{pk_str[8:12]}-{pk_str[12:16]}-{pk_str[16:20]}-{pk_str[20:]}"
|
||
return uuid.UUID(pk_with_hyphens)
|
||
else:
|
||
return uuid.UUID(pk_str)
|
||
|
||
|
||
def format_user_response(user, include_is_active=False):
|
||
"""
|
||
格式化用户信息响应
|
||
|
||
Args:
|
||
user: 用户对象
|
||
include_is_active: 是否包含is_active字段
|
||
|
||
Returns:
|
||
格式化后的用户信息字典
|
||
"""
|
||
response = {
|
||
"id": str(user.id),
|
||
"name": user.name,
|
||
"email": user.email,
|
||
"name": user.name,
|
||
"role": user.role,
|
||
"department": user.department,
|
||
"group": user.group
|
||
}
|
||
|
||
if include_is_active:
|
||
response["is_active"] = user.is_active
|
||
|
||
return response
|
||
|
||
|
||
def validate_uuid_param(pk_str):
|
||
"""
|
||
验证并转换UUID参数,返回标准的错误响应或UUID对象
|
||
|
||
Args:
|
||
pk_str: 字符串形式的UUID
|
||
|
||
Returns:
|
||
元组 (uuid_obj, None) 或 (None, error_response)
|
||
"""
|
||
try:
|
||
uuid_obj = convert_to_uuid(pk_str)
|
||
return uuid_obj, None
|
||
except ValueError:
|
||
error_response = Response({
|
||
"code": 400,
|
||
"message": f"无效的用户ID格式: {pk_str}。用户ID应为有效的UUID格式。",
|
||
"data": None
|
||
}, status=status.HTTP_400_BAD_REQUEST)
|
||
return None, error_response |