内容安全审核
This commit is contained in:
		
							
								
								
									
										40
									
								
								encryption/encrypt_decorator.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								encryption/encrypt_decorator.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| import json | ||||
| from datetime import datetime | ||||
| from functools import wraps | ||||
| from typing import Any | ||||
|  | ||||
| from encryption.encryption import aes_encrypt | ||||
| from schema.response_schema import APIResponse | ||||
| from pydantic import BaseModel | ||||
|  | ||||
|  | ||||
| def encrypt_response(field: str = "data"): | ||||
|     """接口返回值加密装饰器:正确序列化自定义对象为JSON""" | ||||
|  | ||||
|     def decorator(func): | ||||
|         @wraps(func) | ||||
|         async def wrapper(*args, **kwargs): | ||||
|             original_response: APIResponse = await func(*args, **kwargs) | ||||
|             field_value = getattr(original_response, field) | ||||
|  | ||||
|             if not field_value: | ||||
|                 return original_response | ||||
|  | ||||
|             # 自定义JSON序列化函数:处理Pydantic模型和datetime | ||||
|             def json_default(obj: Any) -> Any: | ||||
|                 if isinstance(obj, BaseModel): | ||||
|                     return obj.model_dump()  | ||||
|                 if isinstance(obj, datetime): | ||||
|                     return obj.isoformat() | ||||
|                 return str(obj)  | ||||
|  | ||||
|             # 使用自定义序列化函数、确保生成标准JSON | ||||
|             field_value_json = json.dumps(field_value, default=json_default) | ||||
|             encrypted_data = aes_encrypt(field_value_json) | ||||
|             setattr(original_response, field, encrypted_data) | ||||
|  | ||||
|             return original_response | ||||
|  | ||||
|         return wrapper | ||||
|  | ||||
|     return decorator | ||||
		Reference in New Issue
	
	Block a user