falcon api stream vs bounded_stream vs get_media



有人能帮我理解各种方法之间的区别吗:

  1. request.bounded_stream.read()
  2. request.stream.read()
  3. request.get_media()

它们似乎做了同样的事情,但使用stream或bounded_stream提供了一个类似字节的对象。

class test_dev(object):
async def on_post(self, request, response):
obj = await request.bounded_stream.read()
print(obj)
class test_dev(object):
async def on_post(self, request, response):
obj = await request.stream.read()
print(obj)
class test_dev(object):
async def on_post(self, request, response):
obj = await request.get_media()
print(obj)

streambounded_stream是类似文件的包装器,用于访问来自服务器的请求体数据流。这些是不可搜索的,据我所知,也不可能偷看它们。

它们之间的区别在于后者绑定到请求的content_length,其中stream的行为可能因系统而异。这在官方文件中有详细说明。

至于get_media(),它是media属性的包装器。从文档中,您可以阅读:

警告:

此操作将在第一次调用请求流时使用请求流并缓存结果。后续调用将只检索对象的缓存版本。

因此,第一次访问request.media时,请求流被消耗并缓存,这意味着从streambounded_stream上的那一刻起,将返回空数据流。默认情况下,应用程序将假定内容类型为application/json,并使用json库对内容进行序列化和反序列化。

从文档中不太清楚的是,如果您选择访问并因此消费streambounded_stream,那么访问media将返回错误。如果您选择自己访问streambounded_stream,您还必须自己存储数据。

相关内容

  • 没有找到相关文章

最新更新