• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Sanic框架流式传输操作示例

python 搞代码 4年前 (2022-01-08) 31次浏览 已收录 0个评论

这篇文章主要介绍了Sanic框架流式传输操作,结合实例形式分析了Sanic通过流请求与响应传输操作相关实现技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Sanic框架流式传输操作。分享给大家供大家参考,具体如下:

简介

Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快。除了Flask之外,Sanic还支持异步请求处理程序。这意味着你可以使用Python 3.5中新的闪亮的异步/等待语法,使你的代码非阻塞和快速。

在前面一篇《Sanic框架Cookies操作》中已经讲到,如何在Sanic中使用Cookie,接下来将介绍一下Sanic的流的使用:

请求流式传输

Sanic允许通过流获取请求数据,如下所示,当请求结束时,request.stream.get()返回为None,只有postputpatch decorator拥有流参数:

 from sanic.response import stream @app.post("/post_stream",stream=True) async def post_stream(request): async def streaming(response): while True: body = await request.stream.get() if body is None: break body = body.decode("utf-8") reponse.write(body) return stream(streaming) @app.put("/put_stream",stream=True) async def put_stream(request): async def streaming(response): while True: body = await request.stream.get() if body is None: break body = body.decode("utf-8") response.write("utf-8") return stream(streaming) 

除了上述例子的方法之外,我们之前还讲过用add_route方法动态添加路由:

 from sanic.response import text from sanic.views import HTTPMethodView from sanic.views import stream as stream_decorator class StreamView(HTTPMethodView) @stream_decorator async def post(self,request) result = '' while True: body = await request.stream.get() if body is None: break body = body.decode('utf-8') result += body return text(result) app.add_route(StreamView.as_view(),"/method_view") 

值得注意的是,stream_decorator装饰器中处理函数的函数名称,若为post则为post请求,若为put则为put请求。在之前讲述路由的文章《Sanic框架路由用法》中讲到一个CompositionView类来自

来源gao!%daima.com搞$代*!码$网

定义一个路由,CompositionView在流式请求中同样适用:

 from sanic.views import CompositionView async def post_stream_view(request): result = '' while True: body = await request.stream.get() if body is None: break body = body.decode('utf-8') result += body return text(result) view = CompositionView() view.add(['POST'],post_stream_view,stream=True) app.add_route(view,"/post_stream_view") 

响应流式传输

Sanic允许你使用stream方法将内容传输到客户端,该方法接受一个通过StreamingHTTPResponse传入的对象的协程回调,举个栗子:

 from sanic.response import stream @app.route("/post_stream_info",methods=["POST"]) async def post_stream_info(request): async def streaming(response): response.write("no") response.write("bug") return stream(streaming) 

更多关于Python相关内容可查看本站专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

以上就是Sanic框架流式传输操作示例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Sanic框架流式传输操作示例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址