从烧瓶 api 获取参数

Posted

技术标签:

【中文标题】从烧瓶 api 获取参数【英文标题】:Get parameters from a flask api 【发布时间】:2019-12-29 09:19:20 【问题描述】:

我正在尝试让我的 Angular 应用程序与 Flask 中内置的 API 进行通信。一切顺利,直到我尝试向 Flask 发出 get 请求并尝试在 Flask 中检索其参数。 N.B.:如果不涉及参数也没关系,反过来发送参数也可以。

这是我的烧瓶代码:

app = Flask(__name__)
CORS(app,resources=r"/api/*": "origins": "*")

class Load(Resource):
    def get(self) :
        return json.dumps(['test1','test2','test3'])

class Save(Resource):
    def get(self) :
        print json.loads(request.args.get('data'));
        return make_response('', 201)

api = Api(app)
api.add_resource(Load, '/api/load')
api.add_resource(Save, '/api/save')

这是我的客户端代码

$scope.load = function()
                 
      $http.get("http://127.0.0.1:5000/api/load").then(function(result)
      
                info = JSON.parse(result.data);
                $scope.elems.push(...info); // Some array is filled
      );


$scope.save = function()

      $http.get("http://127.0.0.1:5000/api/save",data: JSON.stringify($scope.elems))
                    .then(function(result));

“加载”效果很好,而“保存”给了我错误:Access-Control-Allow-Origin 不允许 Origin null。

如果它可能有助于我尝试删除“request.args.get”行并且我没有收到错误。有什么线索吗?

【问题讨论】:

【参考方案1】:

我解决了这个问题。我不确定为什么/如何,所以如果有人有更完整的答案,请随时添加/修改。所以问题是 CORS(app) 允许以一种方式进行通信,但不允许以另一种方式进行通信。要修复它,您必须在从 angularjs 发出请求时添加正确的标头。

为此,我认为无法使用 $http.get ,因为您无法指定标头。可能性是:

使用 jQuery 中的 $.get() 显然已经有所需的标头(这对我有用) 使用 $http 并放置显式标头
$http(
  method: 'GET',
  url: '/someUrl',
  headers: 
            'Access-Control-Allow-Origin': '*'
        
)

【讨论】:

以上是关于从烧瓶 api 获取参数的主要内容,如果未能解决你的问题,请参考以下文章

无法使用获取API将表单数据发布到烧瓶

从 API 获取数据并将获取的数据作为参数传递给其他 API 以获取有关数据?

如何在 Flask 视图中获取 url 参数

使用 top - 参数从 TFS-API 获取构建

使用参数 ReactJS 从 API 请求中获取信息

烧瓶 - 不安分使用分页或得到完整的回应