# -*- coding: utf-8 -*- """ 自定义中间件。 """ import json class ResponseCodeMiddleware: """为所有 JSON 响应 body 统一注入 code 字段(与 HTTP 状态码一致)。""" def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) if "application/json" not in response.get("Content-Type", ""): return response try: content = response.content.decode(response.charset or "utf-8") data = json.loads(content) code = response.status_code if isinstance(data, dict): if "code" not in data: data["code"] = code elif isinstance(data, list): data = {"code": code, "data": data} else: data = {"code": code, "data": data} response.content = json.dumps(data, ensure_ascii=False).encode(response.charset or "utf-8") except (ValueError, TypeError, UnicodeDecodeError): pass return response class CorsMiddleware: """简易 CORS 中间件,允许所有跨域请求。""" def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) response["Access-Control-Allow-Origin"] = "*" response["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS" response["Access-Control-Allow-Headers"] = "*" response["Access-Control-Allow-Credentials"] = "true" if request.method == "OPTIONS": response.status_code = 200 response.content = b"" return response