レスポンスの戻り値#

レスポンス関数は、クライアントへの異なるレスポンスをトリガーする、いくつかの異なる型をレスポンス値として返すことができます。可能な直接的な戻り値は次のとおりです。

レスポンス値#

str#

return "Hello"
return await render_template("index.html")

単一の文字列の戻り値は、文字列のMIMEタイプtext/htmlを返すことを意味します。文字列は、デフォルトのcharsetを使用してエンコードされます。

dict#

return {"a": "b"}

単一の辞書の戻り値は、JSON、application/jsonを返すことを意味します。辞書のエンコードには、jsonify関数が使用されます。

list#

return ["a", "b"]

単一のリストの戻り値は、JSON、application/jsonを返すことを意味します。リストのエンコードには、jsonify関数が使用されます。

Response#

@app.route('/')
async def route_func():
    return Response("Hello")

Responseインスタンスを返すことは、正確に何を返したいのかを知っていることを意味します。

AsyncGenerator[bytes, None]#

@app.route('/')
async def route_func():

    async def agen():
        data = await something
        yield data

    return agen()

非同期ジェネレータを返すことで、レスポンスをクライアントにストリーミングでき、Transfer-Encodingヘッダーの値がchunkedの場合、ピークメモリ使用量を削減できます。

Generator[bytes, None, None]#

@app.route('/')
async def route_func():

    def gen():
        yield data

    return gen()

ジェネレータを返すことで、レスポンスをクライアントにストリーミングでき、Transfer-Encodingヘッダーの値がchunkedの場合、ピークメモリ使用量を削減できます。

組み合わせ#

上記のレスポンス値は、説明されているように組み合わせることができます。

Tuple[ResponseValue, int]#

@app.route('/')
async def route_func():
    return "Hello", 200

レスポンス値と整数のタプルは、ステータスコードを指定することを意味します。

Tuple[str, int, Dict[str, str]]#

@app.route('/')
async def route_func():
    return "Hello", 200, {'X-Header': 'Value'}

レスポンス値、整数、辞書のタプルは、追加のヘッダーを指定することを意味します。