最快的 Python Web 框架入门

来源:Python开发

ID:PythonPush

速度比较

框架

实现基础

每秒请求数

平均时间

Sanic

Python 3.5 + uvloop

30,601

3.23ms

Wheezy

gunicorn + meinheld

20,244

4.94ms

Falcon

gunicorn + meinheld

18,972

5.27ms

Bottle

gunicorn + meinheld

13,596

7.36ms

Flask

gunicorn + meinheld

4,988

20.08ms

Kyoukai

Python 3.5 + uvloop

3,889

27.44ms

Aiohttp

Python 3.5 + uvloop

2,979

33.42ms

安装

环境:python3.5+ python -m pip install sanic

Hello World

创建文件main.py,写入下面的内容

from sanic import Sanicfrom sanic.response import jsonapp = Sanic(__name__)@app.route("/")async def test(request):    return json({ "hello": "world" })app.run(host="0.0.0.0", port=8000)

运行 python3 main.py sanic是不是看起来和flask一样

Request

属性 request.files (dictionary of File objects) - 上传文件列表 request.json (any) - json数据 request.args (dict) - get数据 request.form (dict) - post表单数据

例子

from sanic import Sanicfrom sanic.response import json@app.route("/json")def post_json(request):    return json({ "received": True, "message": request.json })@app.route("/form")def post_json(request):    return json({ "received": True, "form_data": request.form, "test": request.form.get('test') })@app.route("/files")def post_json(request):    test_file = request.files.get('test')    file_parameters = {        'body': test_file.body,        'name': test_file.name,        'type': test_file.type,    }    return json({ "received": True, "file_names": request.files.keys(), "test_file_parameters": file_parameters })@app.route("/query_string")def query_string(request):    return json({ "parsed": True, "args": request.args, "url": request.url, "query_string": request.query_string })

路由

和flask差不多,一看就懂

from sanic import Sanicfrom sanic.response import text@app.route('/tag/')async def person_handler(request, tag):    return text('Tag - {}'.format(tag))@app.route('/number/')async def person_handler(request, integer_arg):    return text('Integer - {}'.format(integer_arg))@app.route('/number/')async def person_handler(request, number_arg):    return text('Number - {}'.format(number))@app.route('/person/')async def person_handler(request, name):    return text('Person - {}'.format(name))@app.route('/folder/')async def folder_handler(request, folder_id):    return text('Folder - {}'.format(folder_id))

注册中间件

app = Sanic(__name__)@app.middlewareasync def halt_request(request):    print("I am a spy")@app.middleware('request')async def halt_request(request):    return text('I halted the request')@app.middleware('response')async def halt_response(request, response):    return text('I halted the response')@app.route('/')async def handler(request):    return text('I would like to speak now please')app.run(host="0.0.0.0", port=8000)

异常处理

抛出异常

from sanic import Sanicfrom sanic.exceptions import ServerError@app.route('/killme')def i_am_ready_to_die(request):    raise ServerError("Something bad happened")

处理异常

from sanic import Sanicfrom sanic.response import textfrom sanic.exceptions import NotFound@app.exception(NotFound)def ignore_404s(request, exception):    return text("Yep, I totally found the page: {}".format(request.url))

蓝图

和flask中的蓝图一样,用于组织项目结构 创建一个蓝图,相当于创建一个sanic app,上面的用法和上面相同,把app改成蓝图名称bp

from sanic.response import jsonfrom sanic import Blueprintbp = Blueprint('my_blueprint')@bp.route('/')async def bp_root():    return json({'my': 'blueprint'})

蓝图注册到主app

from sanic import Sanicfrom my_blueprint import bpapp = Sanic(__name__)app.register_blueprint(bp)app.run(host='0.0.0.0', port=8000, debug=True)

总结

sanic将是一个非常流行的框架.因为它基于python3.5+,使用了许多新的特性,这些特性让程序速度更快。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java 成神之路

并发编程基础知识点

3486
来自专栏大内老A

[WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]

在《通过扩展自行实现服务授权》一文中,我通过自定义CallContextInitializer的方式在操作方法之前之前根据认证用户设置了当前线程的安全主体,从而...

1908
来自专栏java一日一条

Java 类加载机制详解

Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java文件)编译成 Java 字节码(.class文件),然后类加载器...

921
来自专栏DannyHoo的专栏

iOS中解决后台返回的null导致的崩溃问题--NullSafe

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

1423
来自专栏大内老A

WCF服务端运行时架构体系详解[上篇]

WCF的服务端架构体系又可以成为服务寄宿端架构体系。我们知道,对于一个基于某种类型的服务进行寄宿只需要使用到一个唯一的对象,那就是ServiceHost。甚至在...

1929
来自专栏iOSDevLog

pygit:足够的Git客户端创建一个repo,commit,并将自己推送到GitHub

Git因其非常简单的对象模型而闻名(其中包括) - 并且有充分的理由。学习时git我发现本地对象数据库只是目录中的一堆普通文件.git。除了index(.git...

1242
来自专栏程序员宝库

最快的 Python Web 框架入门

环境:python3.5+ python -m pip install sanic

984
来自专栏SDNLAB

ODL源码分析之flowmod下发流程

上一篇简单分析了openflowjava到openflowplugin(介绍的hello消息),本篇介绍如何从openflowplugin到openflowja...

2997
来自专栏企鹅号快讯

培养这10个习惯,你就离UNIX高手更进一步了

来自:IBM developerWorks 链接:https://www.ibm.com/developerworks/cn/aix/library/au-un...

1996
来自专栏数据小魔方

左手用R右手Python系列——异常捕获与容错处理

一套稳健的代码体系,必须能够包容所有可能出现的错误情况并做出针对性处理,要想达到这个目标,务必要对异常捕获与容错处理有深入的了解和认识。 秉着初学者入门探索的...

29010

扫码关注云+社区