Sanic (веб-сервер asyncio + uvloop) - возвращает пользовательский ответ
Я начинаю с Саника...
Sanic - это похожий на Flask веб-сервер Python 3.5+, созданный для быстрой работы. (...) Sanic поддерживает обработчики асинхронных запросов. Это означает, что вы можете использовать новый блестящий синтаксис async/await из 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)
Например, как я могу вернуть пользовательский ответ с пользовательским кодом состояния?
2 ответа
В 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")
Функция json({"test": True})
просто сбрасывает dict
объект в виде строки JSON, используя ультра быстрый UJSON и установить content_type
пары.
Таким образом, вы можете вернуть пользовательский код состояния, возвращая json({"message": "bla"}, status=201)
или создание HTTPResponse
как приведенный выше код.
Пример из документации
from sanic import response
@app.route('/json')
def handle_request(request):
return response.json(
{'message': 'Hello world!'},
headers={'X-Served-By': 'sanic'},
status=200
)