Доброго дня. Проект на flask(python 3.6.4). Сделано api. Делал по мануалам в интернете. Тестировал с помощью postman. Ситуация следующая.
В postman выполняю POST запрос на http://localhost:5000/api/v1/users для добавления пользователя. Сontent-type: application-json. В body raw пишу {«mail»:«test@mail.ru», «password»:«12345»}. Все отрабатывает. User добавляется.
Аналогично прекрасно отрабатывает это:
curl -H «Content-Type: application/json» -X POST -d '{«mail»:«test2@mail.ru»,«password»:«123456»}' http://localhost:5000/api/v1/users
Но, если начинаю тестить через RestletClient(Chrome), то ничего не работает. Т.е. я добавляю query parameters (mail и password), в headers указываю Content-Type : application-json. И получаю в ответ при POST-запросе:400 Bad Request. Failed to decode JSON object: Expecting value: line 1 column 1 (char 0).
При этом строка запроса выглядит так: http://localhost:5000/api/v1/users?mail=test@mail.ru&password=1234df Т.е. правильно, но совсем не так,как когда я использую body raw в postman (где все работает). Если content-type не указывать, то ошибка 500. И я так понимаю, что flask не может прочитать параметы в запросе и определяет их как None.
Вот код:
# CREATE_USER
@app.route('/api/v1/users', methods=['POST'])
def create_user():
_mail = request.json.get("mail")
_pass = request.json.get("password")
if _mail is None or _pass is None:
abort(404) # потеряны аргументы
if User.query.filter_by(mail = _mail).first() is not None:
abort(404) # пользователь существует
new_user = User(mail = _mail)
new_user.set_password(_pass)
db.session.add(new_user)
db.session.commit()
userID = new_user.id
data = User.query.filter_by(id=userID).first()
result = [data.id, data.mail]
return jsonify(result=result), 201
Что не так? Как правильно прочитать параметры mail и password из запроса? Спасибо!