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?


19
return '', 201
Luc

Jawaban:


161

Anda dapat membacanya di sini.

return render_template('page.html'), 201

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')

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.


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


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


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/


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.


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

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")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.