ส่งคืนรหัสสถานะ HTTP 201 ในขวด


141

เรากำลังใช้ Flask สำหรับหนึ่งใน API ของเราและฉันก็สงสัยว่าถ้าใครรู้วิธีการตอบกลับ 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

สำหรับฉันการจัดการข้อผิดพลาดประเภทนี้ใช้งานได้ (อยู่หลัง IIS) เฉพาะเมื่อ InvalidUsage เป็นลูกของ werkzeug.exceptions.HTTPException ไม่ใช่ข้อยกเว้นทั่วไป
Gyula Sámuel Karli

118

คุณสามารถใช้การตอบกลับเพื่อส่งคืนรหัสสถานะ http ใด ๆ

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

2
นี่ควรเป็นคำตอบที่ได้รับการยอมรับนี่เป็นวิธีที่จะทำ
LoopsGod

นี่เป็นทางออกที่สมบูรณ์แบบ
Shahriar Rahman Zahin

ดีไม่เคยคิดมาก่อน
Arian Saputra

26

เนื่องจากไม่มีรหัสสถานะการส่งที่แนะนำในคำสั่ง return และหากคุณเก็บไว้ในตัวแปรเช่น

notfound = 404
invalid = 403
ok = 200

และการใช้

return xyz, notfound

เมื่อเวลาผ่านไปตรวจสอบให้แน่ใจว่าเป็นประเภท int ไม่ str ที่ฉันพบปัญหาเล็ก ๆ นี้ก็คือรายการของรหัสสถานะตามทั่วโลก http://www.w3.org/Protocols/HTTP/HTRESP.html

หวังว่ามันจะช่วย


17

คุณทำได้

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

หากคุณต้องการส่งคืนข้อมูล JSON ในการตอบกลับพร้อมกับรหัสข้อผิดพลาดคุณสามารถอ่านเกี่ยวกับการตอบกลับได้ที่นี่และที่นี่เพื่อรับรายละเอียด make_response API


6

ในรหัสขวดของคุณคุณควรระบุประเภท MIME ให้บ่อยที่สุดเท่าที่จะทำได้เช่นกัน:

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

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

... ฯลฯ



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_restfulPackage for API ที่ส่งคืน 201 จะกลายเป็นเช่นนั้น

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

โดยที่dataควรเป็นค่า hashable / JsonSerialiable ใด ๆ เช่น dict, string

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.