异步处理的框架Sanic的使用方法和小技巧

Sanic是异步处理的框架,运用Sanic可以开发快速异步响应的web程序。想必大家看到这个都会比较期待和兴奋。

那么如何使用Sanic来实现快速响应呢?我们先来看一看Sanic的基本介绍。

Sanic类似Flask、只支持Python 3.5+ 版本的web 服务器,运行速度更快。在类似Flask的基础上,Sanic支持异步请求处理,你可以使用Python 3.5 中全新而又亮眼的 async/await 语法,使你的代码快速。

下面是一个最简单的Sanic Web 程序:

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
return json({"hello": "world"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

以上代码显示了Sanic的基本用法:

  • 全局生成一个Sanic对象:app = Sanic()
  • Web路由由装饰器@app.route()管理,也可以通过url_for()、add_route()指定(详见文档)
  • 请求响应函数用async声明进行异步处理,输入必须有request对象,返回response对象

什么时候使用Blueprint?

如果网站很复杂,路由路径很多,全部写在一个文件里面会比较复杂,这时候可以使用Blueprint,把不同功能写到不同blueprint文件里面,让整个代码结构逻辑更清晰

Class-Based Views

如果你用过tornado,一定对它用类处理请求的方式印象深刻,对同一个路由路径分别处理GET、POST、DETET等请求方式时,只要实现该类的几个不同方法即可,让整个代码的逻辑结构更清晰。同样,Sanic也提供了基于类的处理方式: HTTPMethodView

Jinja网页模板强大功能

Jinja具有快速强大的html模板渲染能力,是很多Python Web框架首选的html模板处理器。Sanic没有实现自己的模板处理,但可以把Jinja融入进来: sanic_jinja2

i18n国际化处理

Web网站经常要同时支持多种语言,这个时候就要遇到国际化处理的问题,这方便也有模块把Babel集成进来: sanic_babel

小技巧:

你针对路由路径 ‘/product’ 写了Blueprint bp_product, 但要支持en, zh, jp三种语言路径,即: /en/product, /zh/product, /jp/product, 你该怎么做呢?

在一个循环里为每种语言注册该路径:

for lang in [‘en‘, ‘zh‘, ‘jp‘]:

    app.blueprint(bp_product, url_prefix=‘/%s‘ % lang)

MySQL读写

Sanic是异步处理的框架,读写数据库MySQL当然也要用异步IO的方式,才能体系异步的高效。aiomysql就是基于pymysql实现的异步读写MySQL的数据库模块,同样有模块为sanic因一波封装了aiomysql,使得MySQL读写更加方便,它就是: sanicdb

看完是不是觉得很厉害的样子,头脑有没有灵光闪显的感jio?

如果想要了解或学习更多,你可以直接访问猿人学python:https://www.yuanrenxue.com/。里面有更多更丰富且很实用的python学习资料哦。

我们的公众号:猿人学python。扫码即可关注

原文地址:https://www.cnblogs.com/amiza/p/10329636.html

时间: 2024-10-03 14:45:25

异步处理的框架Sanic的使用方法和小技巧的相关文章

  中国菜刀使用方法以及小技巧

相信大多数的站长都用FTP来管理web空间,但是相对于菜刀来说FTP简直弱到爆.就数据库管理方面来说,phpmyadmin和帝国软件只能管理mysql数据库,而且在软件的体积上跟菜刀完全没法比,如果精通SQL语法,何必还要PHPMYADMIN呢?而且中国菜刀以其特色图形界面,支持MYSQL,MSSQL,ORACLE,INFOMIX,ACCESS,支持ADO方式连接的数据库. 服务端: 在服务端运行的代码如下: PHP: ASP: <%eval request("pass")%&g

关于jQuery的appand()和prepend()方法的小技巧

最近工作上有个需求是要求一个自动向上滚动的列表,表有很多行,但只显示一行,每次滚动一行.很简单的一个功能,代码如下 <div class="scroll-area"> <ul class="list1"> <li> <span class="phoneNum">111111111</span> <span class="award">101</spa

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

Github 上Top1的Android 异步网络请求框架

今天给大家分享一个github上Top1的Android异步网络请求框架的使用方法,我给大家分享一个它的基本用法. 先来一个简单的get请求 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before reques

开关控件在主流前端框架中的使用方法

本文仅介绍使用方法,后续再介绍实现方案及优劣对比. jquerymobile jqm可以使用checkbox和select模拟switch控件,只需要增加data-role='flipswitch'即可: 默认开关控件: <input type="checkbox" data-role="flipswitch" /> 若要变为选中状态,只需要增加一个checked属性即可,如下: <input type="checkbox" d

[C#学习笔记之异步编程模式2]BeginInvoke和EndInvoke方法 (转载)

为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了.异步方法很好的解决了这些问题,异步执行某个方法,程序立即开辟一个新线程去运行你的方法,主线程包括界面就不会死掉了.异步调用并不是要减少线程的开销, 它的主要目的是让调用方法的主线程不需要同步等待在这个函数调用上, 从而可以让主线程继续执行它下面的代码. BeginInvoke方法可以使用线程异步

Boost Asio 异步TCP服务器框架

Boost Asio 异步TCP服务器框架 flyfish 2015-5-30 session 类 头文件 #pragma once #include <boost/asio.hpp> #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> #include <boost/enable_shared_from_this.hpp> class session: public boost::enable

960网格布局框架(前端css框架)的使用方法

960框架总宽960px CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间.在此,我们将不再讨论这个问题. 前段时间,我了解到了CSS框架.经过对Malo.BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架. 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发. 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”.你可以通过实验(或者是用fir

struts2.5框架使用通配符指定方法常见错误

struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace="/" extends="struts-default"> <!-- 配置Action --> <actionname="user_*" class="userAction" method="{