sanic的安装/Request/中间件/异常

网友投稿 385 2022-09-22

sanic的安装/Request/中间件/异常

###简介

sanic是一款用python3.5+写的web framework,用法和flask类似,sanic的特点是非常快 github官网:class="data-table" data-id="t7a7e9d1-TEkblVPk" data-transient-attributes="class" data-width="1162px" style="width: 100%; outline: none; border-collapse: collapse;">

框架

实现基础

每秒请求数

平均时间

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

Aioclass="table-last-column" data-id="t6267798-XxCeMhGk" data-transient-attributes="table-cell-selection" style="min-width: auto; overflow-wrap: break-word; margin: 4px 8px; border: 1px solid rgb(217, 217, 217); padding: 4px 8px; cursor: default; vertical-align: top;">

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))

###注册中间件

= 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+,使用了许多新的特性,这些特性让程序速度更快.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用virtualenv管理Python环境(venv)
下一篇:蔚来一年:从破产边缘到“泡沫之巅”!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~