sanic官方文档解析之websocket(网络套接字)和handle decorators(处理程序装饰器)
1,websocket(网络套接字)

在websocket上Sanic提供了一种简单使用的抽象化,来设置websocket(网络套接字)
from sanic import Sanic
from sanic.response import json
from sanic.websocket import WebSocketCommonProtocol # 实例化一个Sanic对象
app = Sanic()
@app.websocket("/feed")
async def feed(request, ws):
while 1:
data = "hello!"
print("Sending:" + data)
# 阻塞发送数据
await ws.send(data)
# 阻塞接收数据
data = await ws.recv()
print("Received:" + data) if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000, protocol=WebSocketCommonProtocol) # 指定协议是WebsocketCommonProtocol

app.add_websocket_route方法能够被替换成路由的装饰器
from sanic import Sanic app = Sanic() async def feed(request, ws):
pass
app.add_websocket_route(feed, "/feed")

调用WebSocket路由的处理程序时,请求作为第一个参数,WebSocket协议对象作为第二个参数。协议对象具有分别发送和接收数据的发送和接收方法
你能够通过app.config来设置自己的Websocket配置.
app.config.WEBSOCKET_MAX_SIZE = 2 ** 20
app.config.WEBSOCKET_MAX_QUEUE = 32
app.config.WEBSOCKET_READ_LIMIT = 2 **16
app.config.WEBSOCKET_WRITE_LIMIT = 2 ** 16
2,处理程序的装饰器

自从Sanic处理程序时简单的Python函数(功能),你可以使用装饰器去装饰函数在单一的管理在flask中,一种典型的使用,一个典型的用例就是,当你希望执行处理代码之前,运行一些代码时候
- 2.1授权装饰器

假设您希望检查用户是否有权访问特定端点。您可以创建一个包装处理程序函数的装饰器,检查客户机是否有权访问资源,并发送适当的响应。
from functools import wraps
from sanic.response import json
from sanic import Sanic # 实例化sanic对象
app = Sanic() def authorized():
def decorator(f):
@wraps(f)
async def decorated_function(request, *args, **kwargs):
# 检查运行方法中的request请求
# 客户授权状态
is_authorized = check_request_for_authorization_status(request) # 执行查看请求校验状态的函数
# is_authorized条件成立
if is_authorized:
# 说明这个用户已经已经被授权了
# 运行这个处理程序的方法并且返回响应
response = await f(request, *args, **kwargs)
return response
else:
# 否则这个用户没有被授权
# 返回json格式的数据
return json({"status": "not_authorized"}, 403)
return decorated_function
return decorator @app.route("/") # 访问路由
@authorized() # 授权的验证
async def test(request): # 被装饰的函数
return json({"status": authorized})
sanic官方文档解析之websocket(网络套接字)和handle decorators(处理程序装饰器)的更多相关文章
- sanic官方文档解析之Custom Protocols(自定义协议)和Socket(网络套接字)
1,Custom Protocol:自定义协议 温馨提示:自定义协议是一个高级用法,大多数的读者不需要用到此功能 通过特殊的自定义协议,你可以改变sanic的协议,自定义协议需要继承子类asyncio ...
- sanic官方文档解析之路由
1,路由,路由相当于一个网址的地址,来确定网址的位置和唯一性 当http://server.url/被允许访问服务器,当最后的"/"通过路由匹配到了业务逻辑处理的函数,将会返回一个 ...
- sanic官方文档解析之Example(二)
1,通过docker部署sanic项目 通过Docker和Docker Compose部署SANIC应用程序是一项很容易实现的任务,下面的示例提供了示例simple_server.py的部署 FROM ...
- sanic官方文档解析之蓝图
1,蓝图(Blueprints) 蓝图可用于子路由的应用,代替增加路由的存在,蓝图的定义和增加路由的方法相似,灵活的在应用中注册,并且可插拔的方式. 尤其是在大型应用中使用蓝图的时候在你逻辑打断的地方 ...
- sanic官方文档解析之streaming(流动,滚动)和class_based_views(CBV的写法)
1,streaming(流媒体) 1.1请求流媒体 Sanic允许你通过流媒体携带请求数据,如下,当请求结束await request.stream.read()就会返回None,仅仅只有post请求 ...
- sanic官方文档解析之Exception和Middleware,Listeners
1,异常 异常是从处理请求内部抛出来的,并且通过Sanic自动的被处理异常,,异常用第一个参数携带异常信息,还可以接受在HTTP响应中要传递回的状态代码.引发异常 1.1引发异常 自动触发异常,,简单 ...
- sanic官方文档解析之Deploying(部署)和Extension(扩展)
1,Deploying(部署) 通过内置的websocket可以很简单的部署sanic项目,之后通过实例sanic.Sanic,我们可以运行run这个方法通过接下来的关键字参数 host (defau ...
- sanic官方文档解析之Example(一)
1,示例 这部的文档是简单的示例集合,它能够帮助你快速的启动应用大部分的应用,这些应用大多事分类的,并且提供给ini工作的连接代码: 1.1,基础示例 这部分示例集成了提供简单sanic简单的代码 单 ...
- sanic官方文档解析之ssl,debug mode模式和test(测试)
1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...
随机推荐
- RAISERROR 的用法(转)
raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql server 2005的帮助 ] 其语法如下: RAISERROR ( { msg_id | msg ...
- 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
我不会做贪心题啊……贪心题啊……题啊……啊…… 我真TM菜爆了啊…… 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序.然后维护一个查询最大值的线段树.对于一个区间[l,r],如果这个区间已 ...
- BZOJ 3209: 花神的数论题【数位dp】
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...
- __getattr__ 与 __getattribute__的区别
原文博客地址 http://www.cnblogs.com/bettermanlu/archive/2011/06/22/2087642.html
- zoj 2562 反素数
题目大意:求n范围内最大的反素数(反素数定义:f(x)表示x的因子数,f(x)>f(x1) (0<x1<x)) x用质因数形式为:x=a1^p1*a2^p2......an^pn(a ...
- 【HDOJ5950】Recursive sequence(矩阵乘法,快速幂)
题意:f[1]=a,f[2]=b,f[i]=2f[i-2]+f[i-1]+i^4(i>=3),多组询问求f[n]对2147493647取模 N,a,b < 2^31 思路:重点在于i^4的 ...
- 【HDOJ6354】Everything Has Changed(计算几何)
题意: 给定一个平面和一个(0,0)为中心的大圆,有n个小圆保证没有两两之间相交与覆盖整个大圆的情况,求小圆覆盖后大圆的周长并 1≤m≤100, -1e3<=x[i],y[i]<=1e3, ...
- 标准C程序设计七---10
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- golang 进程、线程、协程 简介
https://www.cnblogs.com/shenguanpu/archive/2013/05/05/3060616.html https://studygolang.com/articles/ ...
- 【westorm系列之二】配置格式化
1.执行格式化后,给句尾加分号