Получить данные JSON in Flask

Даже после многих примеров здесь и там я не могу заставить свой API работать в методе POST. Вот код о нем:

from flask import Flask, jsonify, request @app.route('/api/v1/lists', methods=['POST']) def add_entry(): print("p0") content = request.get_json() appname = content.get('title') print(content) print(appname) 

Когда я запрос с curl (я запускаю его в Windows):

curl.exe -i -H "Content-Type: application / json" -X POST -d '{"title": "titi"}' http: // localhost: 5000 / api / v1 / lists

curl.exe -i -H "Content-Type: application / json" -X POST -d "{" "" title "" ":" "" Прочитать книгу "" "}" http: // localhost: 5000 / API / v1 / списки

У меня всегда есть ошибка 400:

HTTP / 1.0 400 BAD REQUEST Content-Type: text / html Content-Length: 192 Сервер: Werkzeug / 0.12.1 Python / 3.6.0 Дата: Вт, 04 апр 2017 21:55:29 GMT 400 Плохой запрос Плохой запрос Браузер (или прокси) отправил запрос, который этот сервер не мог понять.

Я не вижу, где ошибка.

Спасибо за вашу помощь.

3 Solutions collect form web for “Получить данные JSON in Flask”

Функция add_entry не возвращает ответ. Вы должны вернуть что-то, даже если оно просто return 'OK' .

EDIT: Вы все еще ничего не возвращаете. В Flask оператор print Python не является эквивалентом echo PHP. Вся print выводится на консоль. Вы все равно должны вернуть значение. Если вам нужно вернуть content и имя appname JSON, затем добавьте

return json.loads({'contents': contents, 'appname': appname})

до конца вашей функции.

И чтобы быть ясным, в представлениях Flask необходимо вернуть значение. То, что функции Python неявно возвращают None, несущественно. Произошла ошибка в том, что ваша функция не имеет статута возврата.

Даже с «рабочим» кодом в случае отказа вашего if-блока (когда value1 и value2 равно None ) приведет к той же ошибке, поскольку вы не обрабатываете else часть if-блока. Исправлено:

 @app.route('/api/v1/list', methods=['POST']) def add_entry(): print("p0") request_json = request.get_json() value1 = request_json.get('First_Name') value2 = request_json.get('Last_Name') response_content = None if value1 is not None and value2 is not None: print("p3") cursor.execute("INSERT INTO person (first_name,last_name) VALUES (%s,%s)", (value1, value2)) response_content = conn.commit() return jsonify(response_content) 

Конечно, вы можете хотеть что-то лучше, чем None как ответ.

Вот код, который работает в моем случае:

 @app.route('/api/v1/list', methods=['POST']) def add_entry(): print("p0") request_json = request.get_json() value1 = request_json.get('First_Name') value2 = request_json.get('Last_Name') if value1 is not None and value2 is not None: print("p3") cursor.execute("INSERT INTO person (first_name,last_name) VALUES (%s,%s)", (value1, value2)) data = conn.commit() return jsonify(data) 
 
Interesting Posts for Van-Lav

Объект 'str' не имеет атрибута 'decode'. Ошибка Python 3?

Экспорт результатов ClearSoup в CSV; scrape + включить значения изображения в столбце

Как использовать маршрутизатор DB в Django 1.4

Пользовательский сигнал post_save, который создает профиль пользователя, вызывается дважды, в результате чего дублирующее значение ключа нарушает уникальное ограничение, только в консоли администратора

В чем смысл философии Питона «никогда не бывает лучше, чем * право сейчас»

Пиксельная манипуляция с помощью PIL.Image и ctypes

что не так с моим факториальным кодом в python

Обновите до numpy 1.8.0 на Ubuntu 12.04

Построение 3D-полигонов в python-matplotlib

Pandas: не могу написать файл excel

Вилка и выход в Python

Python – найти самый длинный (большинство слов) ключ в словаре

MongoDB: запрос ключа, имеющего место в его имени

Python: как передать более одного аргумента в свойство getter?

Может ли PySpark работать с массивами numpy?

Python - лучший язык программирования в мире.