最快的 Python Web 框架入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最快的 Python Web 框架入门相关的知识,希望对你有一定的参考价值。
速度比较
框架 实现基础 每秒请求数 平均时间
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,写入下面的内容
1.from sanic import Sanic
2.from sanic.response import json
3.
4.app = Sanic(name)br/>5.
[email protected]("/")
7.async def test(request):
- ? ?return json({ "hello": "world" })
-
10.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表单数据
例子
1.from sanic import Sanic
2.from sanic.response import json -
[email protected]("/json")
5.def post_json(request): - ? ?return json({ "received": True, "message": request.json })
-
[email protected]("/form")
9.def post_json(request): - ? ?return json({ "received": True, "form_data": request.form, "test": request.form.get(‘test‘) })
-
[email protected]("/files")
13.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 })
-
[email protected]("/query_string")
25.def query_string(request): - ? ?return json({ "parsed": True, "args": request.args, "url": request.url, "query_string": request.query_string })
路由
和flask差不多,一看就懂
1.from sanic import Sanic
2.from sanic.response import text -
[email protected](‘/tag/‘)
5.async def person_handler(request, tag): - ? ?return text(‘Tag - {}‘.format(tag))
-
[email protected](‘/number/‘)
9.async def person_handler(request, integer_arg): - ? ?return text(‘Integer - {}‘.format(integer_arg))
-
[email protected](‘/number/‘)
13.async def person_handler(request, number_arg): - ? ?return text(‘Number - {}‘.format(number))
-
[email protected](‘/person/‘)
17.async def person_handler(request, name): - ? ?return text(‘Person - {}‘.format(name))
-
[email protected](‘/folder/‘)
21.async def folder_handler(request, folder_id): - ? ?return text(‘Folder - {}‘.format(folder_id))
注册中间件
1.app = Sanic(name) -
[email protected]
4.async def halt_request(request): - ? ?print("I am a spy")
-
[email protected](‘request‘)
8.async def halt_request(request): - ? ?return text(‘I halted the request‘)
-
[email protected](‘response‘)
12.async def halt_response(request, response): - ? ?return text(‘I halted the response‘)
-
[email protected](‘/‘)
16.async def handler(request): - ? ?return text(‘I would like to speak now please‘)
-
19.app.run(host="0.0.0.0", port=8000)
异常处理
抛出异常
1.from sanic import Sanic
2.from sanic.exceptions import ServerError -
[email protected](‘/killme‘)
5.def i_am_ready_to_die(request): - ? ?raise ServerError("Something bad happened")
处理异常
1.from sanic import Sanic
2.from sanic.response import text
3.from sanic.exceptions import NotFoundbr/>[email protected](NotFound)
5.def ignore_404s(request, exception): - ? ?return text("Yep, I totally found the page: {}".format(request.url))
蓝图
和flask中的蓝图一样,用于组织项目结构?
创建一个蓝图,相当于创建一个sanic app,上面的用法和上面相同,把app改成蓝图名称bp
1.from sanic.response import json
2.from sanic import Blueprint -
4.bp = Blueprint(‘my_blueprint‘)
-
[email protected](‘/‘)
7.async def bp_root(): - ? ?return json({‘my‘: ‘blueprint‘})
蓝图注册到主app
1.from sanic import Sanic
2.from my_blueprint import bp -
4.app = Sanic(name)
5.app.register_blueprint(bp) -
7.app.run(host=‘0.0.0.0‘, port=8000, debug=True)
总结
sanic将是一个非常流行的框架.因为它基于python3.5+,使用了许多新的特性,这些特性让程序速度更快。
*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
以上是关于最快的 Python Web 框架入门的主要内容,如果未能解决你的问题,请参考以下文章