在我正在制作的一个非常基本的测试网络应用程序中,我在提交表单时使用angular来运行一个函数。该函数异步地将数据发布到我构建的简单api,该api应该根据它接收的POST信息将数据输入到数据库中。看起来POST在前端工作正常,但我无法从Flask访问request.json
或获取任何发布数据。我觉得这个问题可能是我忽略的一些简单问题,但截至目前我根本无法解决这个问题。以下是一些代码:
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))
我无法停止收到错误,好像请求不是我认为应该是的,我还应该做些什么来正确处理这个问题?因为我在使用Angular发送POST时甚至无法访问具有有效负载的REST客户端时都无法访问任何POST信息。
以下是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 :(得分:0)
您可以使用request.data
获取原始发布数据。
您还可以将silent
的{{1}}标记设置为get_json
,这样您就可以获得确切的失败信息。
get_json(force = False,silent = False,cache = True)
参数:
force - 如果设置为True,则忽略mimetype silent - 如果设置为False,则此方法将以静默方式失败并返回False cache - 如果设置为True,则会在请求中记住已解析的JSON数据。
答案 1 :(得分:0)
尝试在启动应用之前添加#
,然后重试。
您还可以尝试: message = request.json.get(&#39; message&#39;)
我也会尝试将此放入你的路线
[&#39; POST&#39;,&#39; OPTIONS&#39;])