使用Sanic开发快速异步响应的Web程序

Sanic是一个相似Flask、仅仅支持Python 3.5+ 版本的web 服务器,旨在运行速度更快。在相似Flask的基础上,Sanic支持异步请求处理,也就是说,你能够使用Python 3.5 中全新而又亮眼的 async/await 语法,使你的代码非阻塞且快速。
图片描述html

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

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的基本用法:web

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

若是网站很复杂,路由路径不少,所有写在一个文件里面会比较复杂,这时候能够使用Blueprint,把不一样功能写到不一样blueprint文件里面,让整个代码结构逻辑更清晰数据库

Class-Based Viewsjson

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

Jinja网页模板babel

Jinja具备快速强大的html模板渲染能力,是不少Python Web框架首选的html模板处理器。Sanic没有实现本身的模板处理,但能够把Jinja融入进来: sanic_jinja2app

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

相关文章
相关标签/搜索