Files
boss_dp/server/middleware.py
2026-02-25 00:14:22 +08:00

51 lines
1.7 KiB
Python

# -*- 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