2017-04-24 35 views
2

我正在使用django項目,當他們通過和api調用請求某些特定數據時,它充當其他服務器的分發服務器,此數據以JSON的形式並且非常大。所以我在想,有沒有什麼辦法可以設置我的DRF APIView響應,以便爲內容編碼提供gzip設置的輸出JSON響應,從而減少內容的大小,而消耗其他服務器時。Django rest框架,設置api響應內容編碼爲gzip

目前我的應用程序運行在gunicorn上,nginx在前端作爲代理。

回答

4

Django有一個內置的gzip middleware

如果您使用的Django版本< = 1.10,在您的settings.py

MIDDLEWARE_CLASSES = [ 
    'django.middleware.gzip.GZipMiddleware', 
    ... 
] 

如果您使用的Django版本> 1.10:

MIDDLEWARE = [ 
    'django.middleware.gzip.GZipMiddleware', 
    ... 
] 

這個中間件之前,應進行任何設置其他需要讀取或寫入響應體的中間件,以便之後進行壓縮。

爲什麼? 因爲對於傳入請求,django使用中間件從上到下處理請求,如設置中所定義。 對於外出響應中間件稱爲從下到上。

因此聲明gzip中間件作爲第一個中間件將使傳入的請求被解壓縮以供其他中間件讀取;並且即將離開之前即將離開的響應將被壓縮,以便它不會干擾其他中間件的操作。

+0

嗯解釋讓我試試看,但它似乎從你的解釋是有道理的。 – pitaside

+0

該解決方案適合您嗎? –

相關問題