我在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
。