フラスコでHTTPステータスコード201を返す


141

APIの1つにFlaskを使用していますが、誰かがHTTP応答201を返す方法を知っているかどうか疑問に思っていましたか?

404などのエラーの場合、次を呼び出すことができます。

from flask import abort
abort(404)

しかし、201については

LookupError:201の例外なし

ドキュメントでこのような独自の例外を作成する必要がありますか?


18
return '', 201
Luc

回答:


158

あなたはそれについてここで読むことができます。

return render_template('page.html'), 201

11
これにはpage.html... は必要ありません。
Chris Stryczynski、2018年

私にとって、このタイプのエラー処理は、IISの背後でInvalidUsageがwerkzeug.exceptions.HTTPExceptionの子であり、一般的な例外ではない場合にのみ機能しました
GyulaSámuelKarli

118

Responseを使用して、任意のhttpステータスコードを返すことができます。

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')

2
これは受け入れられる答えであるはずです、これはそれを行うための頼りになる方法です。
LoopsGod

これは本当に完璧なソリューションです
Shahriar Rahman Zahin

素晴らしい、これまで考えたことがない
Arian Saputra

26

提案された欠如として、リターンステートメントでステータスコードを送信し、それを次のようないくつかの変数に保存している場合

notfound = 404
invalid = 403
ok = 200

そして使用

return xyz, notfound

時間よりもその型がstrではなくintであることを確認してください。私がこの小さな問題に直面したので、ここにもステータスコードのリストがあり、グローバルにフォローされてい ます

それが役に立てば幸い。


17

できるよ

result = {'a': 'b'}
return jsonify(result), 201

エラーコードとともに応答でJSONデータを返す場合は、ここここでmake_response APIの詳細を確認できます。


5

あなたのフラスコのコードでは、理想的にはできるだけ頻繁にMIMEタイプも指定する必要があります。

return html_page_str, 200, {'ContentType':'text/html'}

return json.dumps({'success':True}), 200, {'ContentType':'application/json'}

...等


1

応答を送信するためにフラスコ_APIを使用することもできます

from flask_api import status

@app.route('/your-api/')
def empty_view(self):
    content = {'your content here'}
    return content, status.HTTP_201_CREATED

ここでリファレンスを見つけることができますhttp://www.flaskapi.org/api-guide/status-codes/


1

APIの作成方法に応じて、通常は201(作成済み)を使用して、作成されたリソースを返します。たとえば、ユーザーアカウントを作成している場合は、次のようにします。

return {"data": {"username": "test","id":"fdsf345"}}, 201

後置番号は返されるステータスコードであることに注意してください。

または、次のようなメッセージをクライアントに送信することもできます。

return {"msg": "Created Successfully"}, 201

0

私の場合、それを機能させるために上記を組み合わせる必要がありました

return Response(json.dumps({'Error': 'Error in payload'}), 
status=422, 
mimetype="application/json")

0

したがって、flask_restfulAPIのパッケージを使用している場合、201が返されます。

def bla(*args, **kwargs):
    ...
    return data, 201

where dataは、dictやstringなどのハッシュ可能/ JsonSerialiableの値でなければなりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.