无法使用Django Rest框架发送压缩的gzip数据



我在Django Rest APIView框架中发送JSON文件。我想减小文件的大小。以下代码实现,但接收以下错误:

@api_view(['GET','POST'])
def myMethod(request):
from rest_framework.response import Response
if request.method == 'POST':
import gzip
# ****Some code lines here to generated small json***
myJson = json.dumps(parsed, indent=4)
compressedContent = gzip.compress(myJson.encode('utf-8'), 5)  # compressedContent is byte format
return Response(compressedContent, status=status.HTTP_200_OK)

正如这个链接中提到的,我也实现了中间件。Django rest框架,将api响应Content-Encoding设置为gzip

中间件= ["django.middleware.gzip.GZipMiddleware",…)

尝试从Postman调用,显示以下错误。

UnicodeDecodeError: 'utf-8' codec无法解码位置1中的字节0x8b:无效的起始字节。服务器内部错误。

是否有办法我可以设置接受编码的地方。我想不明白。请注意,邮差已经接受编码到gzip, deflate, br

你能回答是什么问题吗?

感谢

我也有同样的问题。

这比预期的要容易。只需调用settings.py中的中间件作为列表中的第一个(如您的链接中所解释的):

MIDDLEWARE = [
'django.middleware.gzip.GZipMiddleware', #This one does the job
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

之后中间件将处理请求压缩。因此不需要在代码中压缩它,也不需要声明新的头文件:

@api_view(['GET','POST'])
def myMethod(request):
from rest_framework.response import Response
if request.method == 'POST':
myJson = json.dumps(parsed, indent=4)
return Response(myJson , status=status.HTTP_200_OK)

请确保在您的请求中包含Accept-Encoding: gzip

最新更新