跳过主内容

允许WSGI应用程序在uWSGI下使用Transfer-Encoding: chunked。

项目描述

https://coveralls.io/repos/github/btimby/uwsgi-chunked/badge.svg?branch=master https://github.com/btimby/uwsgi-chunked/actions/workflows/ci.yml/badge.svg https://badge.fury.io/py/uwsgi-chunked.svg

uwsgi-chunked

WSGI应用程序包装器,用于处理Transfer-Encoding: chunked

此库为使用 uwsgi底层api 读取使用Transfer-Encoding: chunked的请求的WSGI应用程序提供了一个简单的包装器。

在正常操作中,它将整个请求读取到内存中,因此如果您预计请求很大(如上传),您应将这些请求卸载到代理服务器(如nginx)或如果您的应用程序允许,使用流模式。

安装

$ pip install uwsgi_chunked

用法

当您运行uwsgi时,传递参数: --http-chunked-input

与Django一起使用的方法如下,您应该编辑默认Django应用程序中提供的wsgi.py文件。

"""
WSGI config for myapp project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.django.ac.cn/en/3.2/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application
from uwsgi_chunked import Chunked

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')

application = Chunked(get_wsgi_application())

要使用流模式,将可选关键字参数stream=True传递给Chunked。请注意,流模式不会设置WSGI规范所要求的Content-Length头。

application = Chunked(get_wsgi_application(), stream=True)

工作原理

《Chunked》对象查找带有《Transfer-Encoding: chunked》的请求,并使用低级uwsgi API读取请求数据。然后,它将请求数据放置在`environ['wsgi.input']`中的`BytesIO`实例中,这是预期的位置。它还设置了《Content-Length》标题,因为WSGI需要这样做。在不使用流模式时,整个请求数据被读入内存,以便计算《Content-Length》标题。

开发

欢迎提出问题和PR。这是一个没有依赖的简单模块,但它只能在运行在《uwsgi》下时工作。在《uwsgi》下运行时,有一个特殊的模块可用,提供必要的API。

您可以使用`make run`在docker中运行演示应用程序。演示应用程序使用自动重新加载来检测Python模块的更改。

测试需要演示应用程序(在《uwsgi》下运行)正常工作。因此,在一个终端中执行`make run`,在另一个终端中执行`make test`。

您还可以使用`make curl`目标(演示应用程序正在运行时)使用curl进行测试。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

uwsgi-chunked-0.1.8.tar.gz (4.7 kB 查看哈希)

上传时间

构建分发

uwsgi_chunked-0.1.8-py3-none-any.whl (5.0 kB 查看哈希)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面