Kembalikan kode status HTTP 201 dalam labu

151

Kami menggunakan Flask untuk salah satu API kami dan saya hanya ingin tahu apakah ada yang tahu cara mengembalikan respons HTTP 201?

Untuk kesalahan seperti 404 kita dapat memanggil:

from flask import abort
abort(404)

Tapi untuk 201 saya dapatkan

LookupError: tidak terkecuali 201

Apakah saya perlu membuat pengecualian saya sendiri seperti ini di dokumen?

ingh.am
sumber
19
return '', 201
Luc

Jawaban:

161

Anda dapat membacanya di sini.

return render_template('page.html'), 201
Sakit
sumber
13
Ini membutuhkan page.html... Ini tidak akan bekerja dengan sendirinya.
Chris Stryczynski
Bagi saya jenis penanganan kesalahan ini berhasil (di belakang IIS) hanya jika InvalidUsage adalah anak dari werkzeug.exceptions.HTTPException, bukan Exception umum
Gyula Sámuel Karli
137

Anda dapat menggunakan Respon untuk mengembalikan kode status http.

> from flask import Response
> return Response("{'a':'b'}", status=201, mimetype='application/json')
Yasir
sumber
4
Ini harus menjadi jawaban yang diterima, ini adalah cara terbaik untuk melakukannya.
LoopsGod
Ini benar-benar solusi yang tepat
Shahriar Rahman Zahin
hebat, jangan pernah berpikir sebelumnya
Arian Saputra
26

Karena kekurangan disarankan mengirim kode status dalam pernyataan kembali dan jika Anda menyimpannya dalam beberapa variabel seperti

notfound = 404
invalid = 403
ok = 200

dan menggunakan

return xyz, notfound

dari waktu pastikan tipenya int bukan str. seperti yang saya hadapi masalah kecil ini juga berikut adalah daftar kode status diikuti secara global http://www.w3.org/Protocols/HTTP/HTRESP.html

Semoga membantu.

Harsh Daftary
sumber
19

Anda dapat melakukan

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

jika Anda ingin mengembalikan data JSON dalam respons bersama dengan kode kesalahan Anda dapat membaca tentang tanggapan di sini dan di sini untuk detail API make_response

Kishan K
sumber
6

Dalam kode flask Anda, idealnya Anda harus menentukan tipe MIME sesering mungkin, juga:

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

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

... dll

Ben Wheeler
sumber
2

Anda juga bisa menggunakan flask_api untuk mengirim respon

from flask_api import status

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

Anda dapat menemukan referensi di sini http://www.flaskapi.org/api-guide/status-codes/

Vivek
sumber
1

Jadi, jika Anda menggunakan flask_restfulPackage untuk API mengembalikan 201 akan menjadi seperti

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

di mana dataharus ada nilai hashable / JsonSerialiable, seperti dict, string.

Deepak Sharma
sumber
1

Bergantung pada bagaimana API dibuat, biasanya dengan 201 (dibuat) Anda akan mengembalikan sumber daya yang telah dibuat. Misalnya jika itu membuat akun pengguna, Anda akan melakukan sesuatu seperti:

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

Perhatikan nomor postfixed adalah kode status yang dikembalikan.

Alternatifnya, Anda mungkin ingin mengirim pesan ke klien seperti:

return {"msg": "Created Successfully"}, 201
Buaya
sumber
0

Dalam kasus saya, saya harus menggabungkan hal-hal di atas untuk membuatnya bekerja

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