gpt4 book ai didi

python - 为来自客户端的请求和来自服务器的响应(REST API)在 Django 中压缩 JSON 有效负载。

转载 作者:行者123 更新时间:2023-12-04 02:32:12 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以压缩我每次必须发送的带有许多重复字段名称的 JSON 有效负载。虽然 this question只是关于压缩响应,我想知道如何压缩来自客户端(可能是移动应用程序)的 JSON 有效负载。另外,我想知道如何在客户端和服务器端将压缩的 JSON 文件转换回其原始结构。

详细的步骤答案将不胜感激。

我正在使用 djangorestframework==2.4.4Django==1.7.7对于 API。

最佳答案

在客户端,不同的工具可能以不同的方式完成它。 python-requests 的简单实现基于客户端在 this post 中完成.

但是关于解压,我觉得还是在webserver层面做比较好,就和你对响应压缩做的一样。貌似Nginx没有内置配置,不过有人做了sort of 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

此外,您必须将中间件配置为第一个中间件:

# 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',
]

以下是引用资料:
  • Stackoverflow post on how to send gzipped reqeusts ,
  • Python 3 gzip documentation ,
  • Server fault thread on request body decompression ,
  • Django middleware reference .
  • 关于python - 为来自客户端的请求和来自服务器的响应(REST API)在 Django 中压缩 JSON 有效负载。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30098795/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com