feat: 添加幂等性中间件 防止重复提交

This commit is contained in:
XIE7654
2025-10-16 20:21:55 +08:00
parent 42d5a3da21
commit 1756f549c9
6 changed files with 90 additions and 10 deletions

View File

@@ -0,0 +1,27 @@
from rest_framework.response import Response
from rest_framework import status
from utils.idempotency_helper import generate_idempotency_key, check_idempotency, get_user_identifier
def idempotent(timeout=10):
"""
幂等性装饰器用于单个DRF接口
:param timeout: 重复判断时间窗口(秒)
"""
def decorator(view_func):
def wrapper(self, request, *args, **kwargs):
user_id = get_user_identifier(request)
key = generate_idempotency_key(user_id, request.path, request.body)
if check_idempotency(key, timeout):
return Response(
{"error": "请勿重复提交"},
status=status.HTTP_409_CONFLICT
)
return view_func(self, request, *args, **kwargs)
return wrapper
return decorator