You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django 1.11中为所有接口响应头设置UTF-8编码的charset参数

可行实现方案

你提到的后置中间件方案完全可行,是通用性最强的解决方案,除此之外也可以根据你的项目场景选择更轻量化的方案:

方案1:自定义后置中间件(推荐,全场景兼容)

该方案可以统一处理所有接口的响应头,不会覆盖已有正确配置:

  • 在你的项目任意应用下新建middleware.py文件,写入以下代码:
# 兼容Django 1.11 版本的中间件写法
class UTF8CharsetMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 先执行所有上游中间件和视图逻辑,拿到最终响应
        response = self.get_response(request)
        # 仅处理未指定charset的响应,可按需添加判断仅针对json类型修改
        if "Content-Type" in response and "charset" not in response["Content-Type"]:
            # 若只需要修改json接口,放开下一行的判断即可
            # if "application/json" in response["Content-Type"]:
            response["Content-Type"] = f"{response['Content-Type']}; charset=UTF-8"
        return response
  • 在settings.py的MIDDLEWARE列表最末尾添加中间件注册配置,保证它是最后一个处理响应的中间件,避免被上游逻辑覆盖:
MIDDLEWARE = [
    # 其他原有中间件保持不变
    '你的应用名称.middleware.UTF8CharsetMiddleware',
]

方案2:统一使用JsonResponse返回接口数据

如果你的项目接口均为json类型,不需要处理其他返回格式,可以直接替换所有手动构造的HttpResponse为Django自带的JsonResponse,它默认会自动携带charset=UTF-8参数:

# 旧写法,不会自动加charset
from django.http import HttpResponse
import json
return HttpResponse(json.dumps(data), content_type="application/json")

# 新写法,自动生成符合要求的Content-Type
from django.http import JsonResponse
return JsonResponse(data)

方案3:全局配置默认参数(仅全接口为json场景可用)

如果你的项目所有接口都是json返回,没有其他页面、静态文件等响应,可直接在settings.py中添加以下配置:

DEFAULT_CHARSET = "utf-8"
DEFAULT_CONTENT_TYPE = "application/json; charset=utf-8"

内容的提问来源于stack exchange,提问作者Antonio Gamiz Delgado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:45:01