2016-12-14 76 views
3

我开始用Sanic ...中信高科(ASYNCIO + uvloop的网络服务器) - 返回自定义响应

中信高科是对去 快写的烧瓶中,像Python 3.5+的Web服务器。 (...) 除了Flask之外,Sanic还支持异步请求处理程序。 这意味着您可以使用Python 3.5中的新闪亮异步/等待语法,使您的代码非阻塞且快速。

...直到这一点,关于如何使用他和文档不太好的例子很少。

继文档基本的例子,我们有

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) 

我如何可以返回一个自定义状态代码自定义响应,例如?

回答

6

Sanic的HTTP响应是HTTPResponse情况下,你可以在它下面的代码执行看到,和功能jsontexthtml只是封装对象创建,继factory pattern

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

函数json({"test": True})只是使用超快速ujson将一个dict对象转储为JSON字符串,并设置content_type参数。

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