我们正在使用 Django1.11 并且我们遇到了一些问题,因为我们的标头Content-Type
不包含charset
设置为 UTF-8 的部分。像这样的东西:
Content-Type: application/json; charset=UTF-8
我想为所有端点解决这个问题,所以我想在所有中间件都运行后包含一个中间件来运行。问题是我不知道这是否可能。有任何想法吗?还是替代解决方案?
我们正在使用 Django1.11 并且我们遇到了一些问题,因为我们的标头Content-Type
不包含charset
设置为 UTF-8 的部分。像这样的东西:
Content-Type: application/json; charset=UTF-8
我想为所有端点解决这个问题,所以我想在所有中间件都运行后包含一个中间件来运行。问题是我不知道这是否可能。有任何想法吗?还是替代解决方案?
您可以像这样编写自定义中间件:
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):
# ....