2015-05-21 2 views
0

В очень базовом тестовом веб-приложении, которое я создаю, я использую функцию углового для запуска функции при отправке формы. Функция асинхронно отправляет данные в простой 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 

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

ответ

0

вы можете использовать request.data, чтобы получить исходные данные.

Вы также можете установить флаг silentget_json на номер True, чтобы получить точное сообщение об ошибке.

из docs

get_json (сила = False, бесшумный = False, кэш = True)

Параметры:
силы - если установлено значение ИСТИНА, MimeType игнорируется.
silent - если установлено значение False, этот метод терпит неудачу и возвращает False.
кеш - если установлено значение Истина, то по запросу данные разбора JSON запоминаются.

+0

Я пробовал это, а также (забыл написать его выше) и верю, получил еще 400 ошибок, я могу дважды проверить, хотя, если никто из них не работает должным образом, что-то маленькое должно быть выключено, я не понимаю, почему 'запросы' не то, что я ожидаю, это тоже импортируется btw –

+0

вы можете передать простой json (даже пустой json) и попытаться прочитать его обратно в фляге, чтобы убедиться, что это действительно проблема с передаваемыми данными или вы можете удалить заголовок из $ http.post(), и пусть фляжка угадывает миметик. – Anbarasan

+0

К сожалению, я пробовал те, и они приводят к аналогичным сбоям. Кажется, что всякий раз, когда вы пытаетесь получить доступ к чему-либо, что обычно существует внутри объекта запроса, ничего не существует, и это приводит к ошибке 400. Я не уверен, что Flask обрабатывает запрос некорректно или что-то в этом роде, когда я получаю перед своим кодом, я могу попробовать пару других вещей, но объект запроса в основном не так, как мне кажется. –

0

Попробуйте добавить app.debug = True прежде, чем приступить к работе и повторите попытку.

Вы также можете попробовать: сообщение = запрос.json.получить («сообщение»)

И я хотел бы также попытаться поместить это в свой маршрут

[, «OPTIONS» «POST»])

Смежные вопросы