本文实例讲述了Sanic框架基于类的视图用法。分享给大家供大家参考,具体如下:
简介
基于类的视图只是实现对请求响应行为的类,他们提供了一种在同一端点上划分不同HTTP请求类型的处理方式。不是定义和装饰三个不同的处理函数,而是为每个端点支持的请求类型分配一个处理函数,可以为端点分配一个基于类的视图。
定义视图
基于类的视图应该是子类HTTPMethodView
,关于HTTPMethodView
的简单用法在前面的博文中有简单的提到过。我们可以自定义一个类继承于HTTPMethodView
,然后你可以在其中定义各种HTTP请求类型实施方法,如果接收到一个没有定义方法的请求,那么将会产生一个响应:405:Method not allowed。
要在端点上注册基于类的视图,除了需要定义一个类来继承HTTPMethodView
,那是不够的,还需要调用app.add_route()
方法来进行注册。可用的方法包括:get
、post
、put
、patch
和delete
。使用所有方法的类将如下所示:
from sanic import Sanic from sanic.views import HTTPMethodView from sanic.response import text class SanicView(HTTPMethodView): def get(self,request): return text("it is get") def post(self,request): return text("it is post") def put(self,request): return text("it is put") def patch(self,request): return text("it is patch") def delete(self,request): return text("it is delete") app = Sanic() app.add_route(SanicView.as_view(),"/method_view") if __name__ == "__main__": app.run()
同样,你也可以是用async
语法:
class SanicView(HTTPMethodView): async def get(self,request): return text("it is get") app.add_route(SanicView.as_view(),"/method_view")
网址参数
如果你需要URL参数,请将其包括在方法的定义中:
class SanicView(HTTPMethodView): async def get(self,request,name): return text("it is get and name is {}".format(name)) app.add_route(SanicView.as_view(),"/<name>")
装饰器
在之前的讲路由的文章《Sanic框架路由用法》中有提到,如果我们想在处理函数之前处理一些事情,我们可以使用装饰器。同样,在基于类的视图中同样可以使用装饰器来预处理一些事情。如果你想添加装饰器到类中,可以定义一个decorators
类变量,这些将在调用as_view()
方法时被应用:
def decorator(func): async def wrapper(request,*args,**kwargs): print("有装饰器") response = await func(request,*args,**kwargs) return response return wrapper class SanicView(HTTPMethodView): decorators = [decorator] async def get(self,request): return text("it is ok!") app.add_route(SanicView.as_view(),"/method_view")
重定向
重定向功能在之前的路由文章《Sanic框架路由用法》中也有提到,如果你想在用户访问某个路由时,将其自动跳转至特定的路由,此时就可以使用重定向功能。同样,此功能在基于类的视图中同样能实现,只需要在url_for()
方法中将类名传递进来,而后调用redirect()
方法:
from sanic.response import redirect @app.route("/") async def home(request): url = app.url_for("SanicView") return redirect(url) class SanicView(HTTPMethodView): async def get(self,request): return text("it is get") app.add_route(SanicView.as_view(),"/method_view")
CompositionView
CompositionView的简单使用在之前的文章《Sanic框架路由用法》当中也有简单提到。作为HTTPMethodVIew
的替代方案,你可以使用CompositionView
在视图类之外移动处理函数。每个HTTP请求方法的程序处理函数都在源代码中的其他地方定义,然后使用CompositionView.add
方法添加到视图中:
from sanic.views import CompositionView async def handle_get(request): return text("it is get") view = CompositionView() view.add(["GET"],handle_get) view.add(["POST","PUT"],lambda request: text("it is post or put")) app.add_route(view,"/composition_view")
更多关于Python相关内容可查看本站专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
Sanic框架,基于类的视图
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]