sanic是一款用python3.5+寫的web framework,用法和flask相似,sanic的特色是很是快
github官網:https://github.com/channelcat...python
框架 | 實現基礎 | 每秒請求數 | 平均時間 |
---|---|---|---|
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
git
建立文件main.py,寫入下面的內容github
from sanic import Sanic from sanic.response import json app = 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同樣web
屬性
request.files (dictionary of File objects) - 上傳文件列表
request.json (any) - json數據
request.args (dict) - get數據
request.form (dict) - post表單數據 json
例子flask
from sanic import Sanic from 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差很少,一看就懂app
from sanic import Sanic from sanic.response import text @app.route('/tag/<tag>') async def person_handler(request, tag): return text('Tag - {}'.format(tag)) @app.route('/number/<integer_arg:int>') async def person_handler(request, integer_arg): return text('Integer - {}'.format(integer_arg)) @app.route('/number/<number_arg:number>') async def person_handler(request, number_arg): return text('Number - {}'.format(number)) @app.route('/person/<name:[A-z]>') async def person_handler(request, name): return text('Person - {}'.format(name)) @app.route('/folder/<folder_id:[A-z0-9]{0,4}>') async def folder_handler(request, folder_id): return text('Folder - {}'.format(folder_id))
app = Sanic(__name__) @app.middleware async 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 Sanic from sanic.exceptions import ServerError @app.route('/killme') def i_am_ready_to_die(request): raise ServerError("Something bad happened")
處理異常async
from sanic import Sanic from sanic.response import text from 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改爲藍圖名稱bpoop
from sanic.response import json from sanic import Blueprint bp = Blueprint('my_blueprint') @bp.route('/') async def bp_root(): return json({'my': 'blueprint'})
藍圖註冊到主app
from sanic import Sanic from my_blueprint import bp app = Sanic(__name__) app.register_blueprint(bp) app.run(host='0.0.0.0', port=8000, debug=True)
sanic將是一個很是流行的框架.由於它基於python3.5+,使用了許多新的特性,這些特性讓程序速度更快.