Повернути HTTP код статусу 201 в колбі


141

Ми використовуємо Flask для одного з наших API, і мені було просто цікаво, чи хтось знає, як повернути HTTP-відповідь 201?

Для помилок, таких як 404, ми можемо викликати:

from flask import abort
abort(404)

Але за 201 рік я отримую

LookupError: виняток для 201

Чи потрібно створити власний виняток, як це у документах?


18
return '', 201
Люк

Відповіді:


158

Про це можна прочитати тут.

return render_template('page.html'), 201

11
Це вимагає page.html... Це не спрацює само собою.
Кріс Стричинський

Для мене цей тип обробки помилок працював (позаду IIS), лише якщо InvalidUsage був дитиною werkzeug.exceptions.HTTPException, а не загальним винятком
Gyula Sámuel Karli

118

Ви можете використовувати Response для повернення будь-якого коду статусу http.

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

2
Це має бути прийнятою відповіддю, це шлях до цього.
LoopsGod

Це дійсно ідеальне рішення
Шахріар Рахман Захін

чудово, ніколи не думайте раніше
Arian Saputra

26

Оскільки не вистачає пропозицій, надішліть код статусу у виписці, і якщо ви зберігаєте його в якійсь змінній, як-от

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 у відповідь разом з кодом помилки. Про відповіді ви можете прочитати тут і тут, щоб отримати детальну інформацію про API make_response


5

У своєму колбі, в ідеалі, слід також вказувати тип MIME якомога частіше:

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

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

... тощо


1

ви також можете використовувати flask_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_restfulпакет для повернення API 201, це стане так

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

де dataмає бути будь-яке хешируемое / JsonSerialiable значення, як dict, string.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.