【问题标题】:Bottle access POST IO object?瓶子访问 POST IO 对象?
【发布时间】:2015-06-04 23:38:18
【问题描述】:

我正在向我的 Bottle 服务器发布一个文件,如下所示:

$ echo hello > foo.txt
$ curl -H "Content-Type: application/json" -X POST -d @foo.txt \
      http://localhost:8089/api/noun

服务器

#!/usr/bin/env python

from bottle import Bottle, request

app = Bottle()


@app.post('/api/noun')
def add_noun():
    return {'files': request.POST.allitems()}


if __name__ == '__main__':
    app.run(port=8089)

使用request.POST.allitems()request.POST.keys() 或类似的方法似乎是一种访问有效负载的骇人听闻的方式。 request.files 等效为空。

目前,我将所有内容都放入 StringIO 对象并逐步迭代。

有没有办法直接访问 IO 对象,所以我可以使用next(it) 之类的?

【问题讨论】:

  • 只是好奇:你为什么使用application/json(当你不发送json时)?

标签: python curl request http-post bottle


【解决方案1】:

request.POST.allitems() 看起来不像 to be documented,我想这就是你觉得它很老套的原因。(?)

如果是这样,request.params(即documented)会更符合您的口味吗?

@app.post('/api/noun')
def add_noun():
    return {'files': request.params.items()}

【讨论】:

  • 谢谢,但即使request.params.iteritems() 也没有返回我想要的迭代器。一方面,key 有内容,(value 是空的)。最后,key 可能包含一个巨大的有效载荷,有没有办法逐行对其进行分块?
  • 似乎正在返回它应该返回的内容。你在期待什么?是的,键有内容而值为空,因为您要发布的文件中只有“hello”。试试这个,看看它是否有助于阐明:echo 'hello=123&goodbye=456' > foo.txt
  • 嗯,你是对的;这样可行。所以我的实际问题是POSTing 大型 CSV 文件,而不是将整个 CSV 文件加载到内存中,我想逐行迭代。
  • 啊,查看 FileUpload.save(here's 示例)。它会(有效地)将上传的文件保存到磁盘,然后您可以逐行读取它,也可以根据需要读取它。希望这会有所帮助!
猜你喜欢
  • 2014-03-15
  • 2022-11-14
  • 1970-01-01
  • 2011-06-05
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多