Django使用gzip实现压缩请求,以实现API接口返回的json数据压缩(适用于大量数据在浏览器进行传输中耗费时间长的情况)
1、网站全部支持gzip
在配置文件中增加
MIDDLEWARE_CLASSES = (
'django.middleware.gzip.GZipMiddleware',
)
2、如果希望更细微的gzip力度控制
django提供了gzip_page装饰器来处理:
- @gzip_page用于对视图函数,
@gzip_page def viewFunc(request): return HttpResponse("hello"*100)
-
@gzip_page用于类视图
class HomeView(View): @gzip_page def get(self, request): return render(request, "home.html") @gzip_page def post(self, request): print("Home View POST method...") return redirect("/index/")
上面是对get请求方法和post请求方法使用了压缩
from django.views.decorators.gzip import gzip_page from django.utils.decorators import method_decorator @method_decorator(gzip_page, name='dispatch') class CloudProductViewSet(viewsets.ModelViewSet): """ 云雷达反射率、速度、谱宽、液态水含量等产品新的API接口 2019.10.10 """ def get_queryset(self): pass def list(self, request, *args, **kwargs): pass
name='dispatch'因为dispatch方法被 as_view() 中的 view() 调用,也就相当于对整个类视图的方法添加装饰器
注意:对上面这个继承viewsets.ModelViewSet类来说,@gzip_page不能直接加在 get_queryset() 或者 list()方法 中,因为压缩是对整个请求来说(比如get请求),而单独加在类中的函数中,只是对这个函数作用,并不是对整个请求作用,所以出现错误等情况,以上必须对整个类添加装饰器,才是完整的对请求进行压缩