使用Angularjs发送POST请求并在Flask后端获取参数

raf*_*s88 4 python flask angularjs

我在AngularJS中有这个代码:

myApp.controller('LoginCtrl', function($scope, $http){
  $scope.formData = {};

  $scope.doLogin = function(url, pass){
    $http({
      url: url,
      method: "POST",
      data: $.param($scope.formData)
    }).success(function(data) {
      console.log(data)
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

在beckend(Flask)中,我有这个:

def user_authenticate():
    login = request.args.get('login')
    password = request.args.get('password')
    print login, password
Run Code Online (Sandbox Code Playgroud)

问题是request.args为空.

raf*_*s88 9

UPDATE

在遇到很多问题后,我解决了另一个Stackoverflow的问题.所以,我得到了这段代码:

ANGULARJS

$scope.doLogin = function(url, pass){
    $http({
      url: url,
      method: "POST",
      headers: { 'Content-Type': 'application/json' },
      data: JSON.stringify(data)
    }).success(function(data) {
      console.log(data)
    });
 }
Run Code Online (Sandbox Code Playgroud)

烧瓶

def view_of_test():
    post = request.get_json()
    param = post.get('param_name')
Run Code Online (Sandbox Code Playgroud)

旧版

我只是想我需要将我的代码更改为:

AngularJS:

myApp.controller('LoginCtrl', function($scope, $http){
  $scope.formData = {};

  $scope.doLogin = function(url, pass){
    $http({
      url: url,
      method: "POST",
      data: $.param($scope.formData),
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).success(function(data) {
      console.log(data)
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

只需添加"Content-Type"标题即可.

烧瓶:

def user_authenticate():
    login = request.form.get('login')
    password = request.form.get('password')
    print login, password
Run Code Online (Sandbox Code Playgroud)

而不是使用request.args,请使用request.form.

  • 那是因为`request.args`只包含url参数(因此```之后的所有内容),`request.form`包含POST字段. (2认同)