【问题标题】:How to set charset header in Django 1.11如何在 Django 1.11 中设置字符集标题
【发布时间】:2021-11-05 07:15:26
【问题描述】:

我们使用的是 Django1.11,但我们遇到了一些问题,因为我们的标头 Content-Type 不包含设置为 UTF-8 的 charset 部分。像这样的:

Content-Type: application/json; charset=UTF-8

我想为所有端点修复这个问题,所以我想在所有中间件都运行后包含一个中间件来运行。问题是我不知道这是否可能。有任何想法吗?还是替代解决方案?

【问题讨论】:

  • 您使用标准视图输出 json,没有 django-rest-framework?

标签: django django-views django-1.1


【解决方案1】:

您可以像这样编写自定义中间件:

from django.utils.deprecation import MiddlewareMixin


class AllIsJsonMiddleware(MiddlewareMixin):

    def process_response(self, request, response):
        response['Content-Type'] = 'application/json; charset=UTF-8'
        return response

但我不建议这样做。这会将所有响应转换为 JSON。最好使用像https://www.django-rest-framework.org/ 这样的框架。

但是,可以使用标准视图响应...

return HttpResponse(data, content_type='application/json; charset=UTF-8')

...或自定义装饰器:

from functools import wraps

def json_response(function):
    @wraps(function)
    def wrap(request, *args, **kwargs):
        response = function(request, *args, **kwargs)
        response['Content-Type'] = 'application/json; charset=UTF-8'
        return response
    return wrap

@json_response
def my_view(request):
    # ....

【讨论】:

  • 此响应['charset'] = 'UTF-8' 未在 Content-Type 上设置字符集。我仍然只看到 application/json。
  • 是的。是response['Content-Type'] = 'application/json; charset=UTF-8'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2018-03-12
  • 2015-08-23
  • 2018-03-30
  • 1970-01-01
  • 2014-09-25
  • 2017-03-15
相关资源
最近更新 更多