Iqb*_*bal 7 python django rest json django-rest-framework
我想知道是否有一种方法来压缩JSON有效负载,我必须每次都发送许多重复的字段名称.虽然这个问题只是关于压缩响应,但我想知道如何从客户端(可能是移动应用程序)压缩JSON有效负载.另外,我想知道如何在客户端和服务器端将压缩的JSON文件转换回其原始结构.
将赞赏这些步骤的详细答案.
我使用djangorestframework==2.4.4与Django==1.7.7该API的.
从客户端来看,不同的工具可能会以不同的方式完成它。这篇文章python-requests中完成了基于客户端的简单实现。
但至于解压缩,我认为最好在网络服务器级别完成,就像您对响应压缩所做的一样。Nginx 似乎没有内置配置,但有人做了某种 Lua将请求传递到上游之前
另一种(可能效率较低)解决方案是在第一个 Django 中间件中进行解压缩,如下所示:
import gzip
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# check the headers if you are writing a versatile API
# decompress the request body
request._body = gzip.decompress(request.body)
# fill the request stream in case you're using something like django-rest-framework
request._stream = BytesIO(request.body)
response = self.get_response(request)
return response
Run Code Online (Sandbox Code Playgroud)
此外,您必须将中间件配置为第一个中间件:
# in Django settings
MIDDLEWARE = [
'python path to our new custom middleware',
'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',
]
Run Code Online (Sandbox Code Playgroud)
以下是参考资料: