4

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

例如,如何返回带有自定义状态代码的自定义响应?

4

2 回答 2

8

Sanic中,HTTP 响应是HTTPResponsejson的实例,正如您在下面的代码实现和函数中所见,它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")

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

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

于 2016-12-14T15:29:41.070 回答
0

文档中的示例

from sanic import response

@app.route('/json')
def handle_request(request):
    return response.json(
        {'message': 'Hello world!'},
        headers={'X-Served-By': 'sanic'},
        status=200
    )
于 2018-08-18T11:11:32.950 回答