sanic是一款用 python3.5+ 写的 web framework,用法和 flask 类似,特点是非常快 。
Github 官网:https://github.com/channelcat/sanic
速度比较框架 | 实现基础 | 每秒请求数 | 平均时间 |
---|
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 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一样 Request属性 request.files (dictionary of File objects) - 上传文件列表 request.json (any) - json数据 request.args (dict) - get数据 request.form (dict) - post表单数据 例子 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差不多,一看就懂 from sanic import Sanic
from 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.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')
处理异常 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改成蓝图名称bp 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+,使用了许多新的特性,这些特性让程序速度更快。
|