Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快。除了Flask之外,Sanic还支持异步请求处理程序。这意味着你可以使用Python 3.5中新的闪亮的异步/等待语法,使你的代码非阻塞和快速。
前言:Sanic最低支持Python 3.5,如果需要学习Sanic,请先下载版本不低于3.5的Python包
路由
路由允许用户为不同的URL端点指定不同的处理函数,我们取出上一篇博客的路由为例:
from sanic.response import json
@app.route("/")
async def hello_sanic(request):
data = json({
"code":0})
return data
当我们在浏览器输入http://localhost:5000/
时,根据路由匹配到处理函数hello_sanic
,最终返回JSON对象。Sanic处理函数必须使用语法async def
来定义,因为它们是异步行数。
请求参数
Sanic处理函数带有一个支持请求的参数,即上面的request
参数。如果需要制定一个参数,我们可以使用尖角括号将其括起来,如下所示:
from sanic.response import json
@app.route("/hello/<name>")
async def hello(request,name):
return json({
"name":name})
此时我们再浏览器输入:http://localhost:5000/hello/laowang
时,Sanic将会根据路由匹配处理函数,从而返回数据。此时,我们需要对参数进行指定类型,可以在路由中的参数后面加上:type
,假设传入一个age
参数,为int
类型,路由可以这么写:/hello/<age:int>
。代码如下:
from sanic.response import json
@app.route("/hello/<age:int>")
async def hello_age(request,age):
return json({
"age":age})
此时就可以指定用户传入指定类型的参数了,如果类型不对,将报404错误。
请求类型
对于Sanic处理网络请求,也举了不少例子,可是这些都是GET
请求,那我们该如何定义一个POST
请求呢?与Flask相同,@app.route
支持一个可选参数methods
,methods
可传入一个列表类型,如此,它将允许处理函数使用列表中的任何HTTP方法。
from sanic.response import json
@app.route("/post/json_data",methods=["POST"])
async def post_json(request):
"""
POST请求 json数据
"""
return json(request.json)