无法使用 Django Rest 框架发送压缩的 gzip 数据
unable to Send compressed gzip data using Django Rest framework
我正在 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)
如本 link 中所述,我也实现了中间件。
中间件 = [
'django.middleware.gzip.GZipMiddleware',
...
]
正在尝试从 Postman 调用,但显示以下错误。
UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 1 中的字节 0x8b:起始字节无效。
500, 内部服务器错误。
有什么方法可以在某处设置 Accept-Encoding。我无法弄清楚这一点。
请注意邮递员接受编码为 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
。
我正在 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)
如本 link 中所述,我也实现了中间件。
中间件 = [ 'django.middleware.gzip.GZipMiddleware', ... ]
正在尝试从 Postman 调用,但显示以下错误。
UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 1 中的字节 0x8b:起始字节无效。 500, 内部服务器错误。
有什么方法可以在某处设置 Accept-Encoding。我无法弄清楚这一点。 请注意邮递员接受编码为 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
。