【问题标题】:unable to Send compressed gzip data using Django Rest framework无法使用 Django Rest 框架发送压缩的 gzip 数据
【发布时间】:2021-10-09 11:24:28
【问题描述】:

我在 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 framework, set the api response Content-Encoding to gzip

中间件 = [ 'django.middleware.gzip.GZipMiddleware', ... ]

尝试从 Postman 拨打电话,但显示以下错误。

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

有没有办法可以在某处设置接受编码。我无法弄清楚这一点。 请注意邮递员接受编码以gzip、deflate、br

你能回答一下是什么问题吗?

谢谢

【问题讨论】:

    标签: python django django-rest-framework gzip


    【解决方案1】:

    嗯,我也遇到了同样的问题。

    这比预期的要容易。只需调用settings.py 中的中间件作为列表中的第一个(as explained in your link):

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 2014-09-21
      • 2021-06-18
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多