from functools import wraps from flask import jsonify, request from decimal import Decimal, ROUND_HALF_UP, InvalidOperation, DecimalException from datetime import datetime def validate_json(*required_fields): def decorator(f): @wraps(f) def decorated_function(*args, **kwargs): if not request.is_json: return jsonify({'message': 'Missing JSON in request'}), 400 data = request.get_json() missing_fields = [field for field in required_fields if field not in data] if missing_fields: return jsonify({ 'message': f'Missing required fields: {", ".join(missing_fields)}' }), 400 return f(*args, **kwargs) return decorated_function return decorator def validate_decimal(value): """验证并转换decimal类型的值""" try: if value is None: return None # 转换为Decimal并保留2位小数 return Decimal(str(value)).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) except (TypeError, InvalidOperation, DecimalException): return None def validate_date(date_str): try: return datetime.strptime(date_str, '%Y-%m-%d').date() except: return None