首页 > 解决方案 > 如何在 Django 1.11 中设置字符集标题

问题描述

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

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

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

标签: djangodjango-viewsdjango-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):
    # ....

推荐阅读