gpt4 book ai didi

python - django:如何将传入的 POST 数据作为类似文件的 obj 来使用以进行流处理

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

我正在使用 python + Django 来处理传入的 Web 请求,这些请求可以发布大量作为 POST 数据字段之一附加的 JSON(例如 var1=abc&json_var=lots_of_data&other_var=xxx)。我想使用我自己的流式 json 解析器以流式处理方式处理 JSON,该解析器采用类似文件的句柄作为其输入参数。它出现于https://docs.djangoproject.com/en/1.11/ref/request-response/使用 HttpRequest.__iter__() 这是可行的,但我找不到任何如何使用自己的代码实现此目的的示例(即不仅仅是导入像 xml.etree.ElementTree 这样的库) .

基本上,我想做以下事情:

带有大 JSON 的 POST 请求 => Django/python => 创建类似文件的句柄来读取 POST => 流式 url 解码器 => 流式 JSON 处理器

我可以使用 ijson 作为流式 JSON 处理器。如何填补这两个空白,为 POST 数据创建类似文件的句柄并将其传递给流式 url 解码器?我不想自己动手,但我想如果有必要的话我可以。

最佳答案

我只能通过滚动我自己的生成器和迭代器来解决这个问题。解决这个问题有几个关键:

  • 了解如何在数据分块发送的情况下访问 POST 数据的类文件句柄。我可以在 request.META.get('wsgi.input') 找到它,我使用 this post 找到它。转储所有请求属性
  • 推出我自己的生成器来读取类似文件的句柄和产量(varname,data_chunk)对
  • 基于 this post 的修改版本推出我自己的生成器,创建一个类似文件的句柄,它具有正常的 read() 操作,但具有三个附加功能:
    • f.varname 返回当前正在读取的变量的名称
    • 数据在从 read() 传回之前未进行 url 编码
    • f.next_pair() 前进句柄以读取下一个变量。因此,调用 f.read() 直到完成第一个变量,然后如果还有另一个变量,f.next_pair() 将返回 true,并且可以再次调用 f.read() 直到完成读取下一个变量
  • 可以在主循环中实现进一步的流处理

把它们放在一起看起来像:

f = request.META.get('wsgi.input')
ff = some_magic_adaptor(qs_from_file_to_generator(f))

while ff.next_pair():
print 'varname:' + ff.varname
if ff.varname == 'stream_parse_this':
parser = stream_parser(ff)
for event_results in parser:
do_something

while True:
data = ff.read(buffer_size)
if not data:
break
do_something_with_data_chunk(data)

关于python - django:如何将传入的 POST 数据作为类似文件的 obj 来使用以进行流处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339563/

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