В очень базовом тестовом веб-приложении, которое я создаю, я использую функцию углового для запуска функции при отправке формы. Функция асинхронно отправляет данные в простой api, который я создал, который должен вводить данные в базу данных в зависимости от получаемой им информации POST. Кажется, что POST работает правильно на передней панели, однако я не могу получить доступ к request.json
из Flask вообще или получить любую из данных сообщения. Я чувствую, что эта проблема может быть чем-то простым, я упустил из виду, но на данный момент я не могу понять это вообще. Вот некоторые из кода:
AngularJS:
$scope.submitAddMsg = function(){
var data = {'author': $scope.msgauthor, 'message': $scope.msgmsg};
$http.post('/addMessage', data, {headers: {'Content-Type': 'application/json'}}).
success(function(data, status, headers, config) {
console.log(data);
console.log(status);
console.log(headers);
console.log(config);
}).
error(function(data, status, headers, config) {
alert(JSON.parse(data));
});
};
Колба функция просмотра для /addMessage
@app.route('/addMessage', methods=['POST'])
def addMessage():
#results in 'None type not iterable'
#response = request.form.get('author')
#results in a 400 error
#response = request.get_json()
#results in a 400 error
#response = request.get_json()
#results in 'author' not defined
#name = request.args.get('author')
#return jsonify(author = author)
return str(jsonify(response))
Я не могу остановить получать ошибки, если запрос не то, что я думаю, что это должно быть, есть ли что-то еще, что я должен делать, чтобы правильно справиться с этим? Потому что я не могу получить доступ к какой-либо информации POST при использовании Angular для отправки POST или даже REST-клиента с полезной нагрузкой точно, как угловая передача данных.
Здесь консоль JavaScript, чтобы увидеть, что data
, status
, headers
и config
заканчивает тем, что в функции успеха, которая проходит после POST:
<Response 46 bytes [200 OK]>
testbase.js:53 200
testbase.js:54 function (c){a||(a=Xc(b));return c?(c=a[z(c)],void 0===c&& (c=null),c):a}
testbase.js:55 Object {method: "POST", transformRequest: Array[1], transformResponse: Array[1], headers: Object, url: "/addMessage"…}data: Objectheaders: ObjectAccept: "application/json, text/plain, */*"Content-Type: "application/json"__proto__: Objectmethod: "POST"transformRequest: Array[1]transformResponse: Array[1]url: "/addMessage"__proto__: Object
Любая помощь на получение этого контракта право высоко ценится , дайте мне знать, если вам нужна дополнительная информация
Я пробовал это, а также (забыл написать его выше) и верю, получил еще 400 ошибок, я могу дважды проверить, хотя, если никто из них не работает должным образом, что-то маленькое должно быть выключено, я не понимаю, почему 'запросы' не то, что я ожидаю, это тоже импортируется btw –
вы можете передать простой json (даже пустой json) и попытаться прочитать его обратно в фляге, чтобы убедиться, что это действительно проблема с передаваемыми данными или вы можете удалить заголовок из $ http.post(), и пусть фляжка угадывает миметик. – Anbarasan
К сожалению, я пробовал те, и они приводят к аналогичным сбоям. Кажется, что всякий раз, когда вы пытаетесь получить доступ к чему-либо, что обычно существует внутри объекта запроса, ничего не существует, и это приводит к ошибке 400. Я не уверен, что Flask обрабатывает запрос некорректно или что-то в этом роде, когда я получаю перед своим кодом, я могу попробовать пару других вещей, но объект запроса в основном не так, как мне кажется. –