Повернути 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.