本文实例讲述了Sanic框架基于类的视图用法。分享给大家供大家参考,具体如下:
<强> 强>
基于类的视图只是实现对请求响应行为的类,他们提供了一种在同一端点上划分不同HTTP请求类型的处理方式。不是定义和装饰三个不同的处理函数,而是为每个端点支持的请求类型分配一个处理函数,可以为端点分配一个基于类的视图。
基于类的视图应该是子类<代码> HTTPMethodView> 代码,关于<代码> HTTPMethodView> 代码的简单用法在前面的博文中有简单的提到过。我们可以自定义一个类继承于<代码> HTTPMethodView> 代码,然后你可以在其中定义各种HTTP请求类型实施方法,如果接收到一个没有定义方法的请求,那么将会产生一个响应:
。要在端点上注册基于类的视图,除了需要定义一个类来继承<代码> HTTPMethodView> 代码,那是不够的,还需要调用<代码> app.add_route() 代码>方法来进行注册。可用的方法包括:<代码> 代码>,<代码> 代码>,<代码> 代码>,<代码>补丁代码>和<代码>删除> 代码。使用所有方法的类将如下所示:
从sanic进口sanic 从sanic。视图导入HTTPMethodView 从sanic。响应导入文本 类SanicView (HTTPMethodView): def(自我,请求): 返回文本(“得到”) def post(自我,请求): 返回文本(“文章”) def(自我,请求): 返回文本(“放”) def补丁(自我,要求): 返回文本(“补丁”) def删除(自我,请求): 返回文本(“删除”) 应用=Sanic () app.add_route (SanicView.as_view (),“/method_view”) if __name__==癬_main__”: app.run () >之前同样,你也可以是用<代码>异步代码>语法:
类SanicView (HTTPMethodView): 异步def(自我,请求): 返回文本(“得到”) app.add_route (SanicView.as_view (),“/method_view”) >之前
如果你需要URL参数,请将其包括在方法的定义中:
类SanicView (HTTPMethodView): 异步def(自我,请求,名称): 返回文本(“这是获取和名字是{}”.format(名字)) app.add_route (SanicView.as_view (),“/& lt; name>”) >之前
在之前的讲路由的文章《Sanic框架路由用法》中有提到,如果我们想在处理函数之前处理一些事情,我们可以使用装饰器。同样,在基于类的视图中同样可以使用装饰器来预处理一些事情。如果你想添加装饰器到类中,可以定义一个<代码> decorator> 代码类变量,这些将在调用<代码> as_view() 代码>方法时被应用:
def装饰(函数): 异步def包装器(请求、* args * * kwargs): 打印(“有装饰器”) 响应=等待func(请求、* args * * kwargs) 返回响应 返回包装 类SanicView (HTTPMethodView): decorator=(装饰) 异步def(自我,请求): 返回文本(“好的!”) app.add_route (SanicView.as_view (),“/method_view”) >之前
重定向功能在之前的路由文章《Sanic框架路由用法》中也有提到,如果你想在用户访问某个路由时,将其自动跳转至特定的路,由此时就可以使用重定向功能。同样,此功能在基于类的视图中同样能实现,只需要在<代码> url_for() 代码>方法中将类名传递进来,而后调用<代码>重定向()代码>方法:
从sanic。响应输入重定向 @app.route(“/? 异步def回家(请求): url=app.url_for (“SanicView”) 返回重定向(url) 类SanicView (HTTPMethodView): 异步def(自我,请求): 返回文本(“得到”) app.add_route (SanicView.as_view (),“/method_view”) >之前
CompositionView的简单使用在之前的文章《Sanic框架路由用法》当中也有简单提到。作为<代码> HTTPMethodVIew> 代码的替代方案,你可以使用<代码> CompositionView> 代码在视图类之外移动处理函数。每个HTTP请求方法的程序处理函数都在源代码中的其他地方定义,然后使用<代码> CompositionView.add 代码>方法添加到视图中:
从sanic。视图导入CompositionView 异步def handle_get(请求): 返回文本(“得到”) 视图=CompositionView () view.add(“获得”,handle_get) 视图。add(“文章”、“把”,λ要求:文本(“这是POST或PUT”)) app.add_route(看来,“/composition_view”)Sanic框架基于类的视图用法示例