Sanic(asyncio + uvloop webserver) - 返回自定义响应

Gus*_*oIP 4 python python-asyncio python-3.5 sanic

我是从Sanic开始的......

Sanic是一款类似Flask的Python 3.5+ Web服务器,可以快速编写.(...)除了像Flask一样,Sanic支持异步请求处理程序.这意味着您可以使用Python 3.5中新的闪亮的async/await语法,使您的代码无阻塞且快速.

......到目前为止,关于如何使用他的例子很少,而且文档也不是那么好.

按照文档基本示例,我们有

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
    return json({"test": True})

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8000)
Run Code Online (Sandbox Code Playgroud)

例如,如何使用自定义状态代码返回自定义响应?

Gus*_*oIP 8

Sanic中,HTTP响应是HTTPResponse的实例,正如您在下面的代码实现中看到的那样,以及函数json,text并且html只是按照工厂模式封装了对象创建

from ujson import dumps as json_dumps
 ...    

def json(body, status=200, headers=None):
    return HTTPResponse(json_dumps(body), headers=headers, status=status,
    content_type="application/json")



def text(body, status=200, headers=None):
    return HTTPResponse(body, status=status, headers=headers,
                        content_type="text/plain; charset=utf-8")


def html(body, status=200, headers=None):
    return HTTPResponse(body, status=status, headers=headers,
                        content_type="text/html; charset=utf-8")
Run Code Online (Sandbox Code Playgroud)

该函数使用超快ujsonjson({"test": True})dict对象转储为JSON字符串并设置param.content_type

因此,您可以返回自定义状态代码返回json({"message": "bla"}, status=201)或创建HTTPResponse上述代码.