Django休息框架,将api响应Content-Encoding设置为gzip

pit*_*ide 5 python django json http django-rest-framework

正在研究django项目,当他们通过和api调用请求某些特定数据时,它充当其他服务器的分发服务器,这些数据是JSON形式并且非常大.所以我想我有什么方法可以设置我的DRF APIView响应来为输出的JSON响应提供内容编码的gzip设置,以便在被其他服务器使用时减少内容的大小.

目前我的应用程序正在使用nginx作为代理在gunicorn上运行.

xss*_*han 9

Django有一个内置的gzip中间件.

如果您使用的是django版本<= 1.10,请在您的settings.py:

MIDDLEWARE_CLASSES = [
    'django.middleware.gzip.GZipMiddleware',
    ...
]
Run Code Online (Sandbox Code Playgroud)

如果您使用的是django版本> 1.10:

MIDDLEWARE = [
    'django.middleware.gzip.GZipMiddleware',
    ...
]
Run Code Online (Sandbox Code Playgroud)

应将此中间件放在需要读取或写入响应主体的任何其他中间件之前,以便之后进行压缩.

为什么?因为对于传入请求,django使用设置中定义的从上到下的中间件来处理请求.对于外出响应,中间件被称为自下而上.

因此gzip,将中间件声明为第一个中间件将使得传入的请求被解压缩以被其他中间件读取; 并且传出响应将在离开之前被压缩,因此它不会干扰其他中间件的操作.