只允许一个烧瓶请求一个特定的路线

我有一个使用angularjs前端的应用程序。 我通过$ http服务发出http请求。 如下面的代码所示。

$http.post('/updateGraph', $scope.graphingParameters).success(function(response) {
        $scope.graphingParameters.graph = response.graph;
        $scope.listUnits = JSON.parse(response.listUnits);
        $scope.myHTML = $sce.trustAsHtml($scope.graphingParameters.graph);
        $scope.showME = true;
    })

并且烧瓶中的updateGraph函数如下。

@app.route('/updateGraph', methods = ['POST'])
     def updateGraph():
           selectValues = request.json['selectValues']
           selectSelected = np.array(request.json['selectSelected']).tolist()
           if len(selectSelected) == 0:
                selectSelected = np.array([selectValues[1:3]]).tolist()
           fig, listUnits = plot_Stock_vs_Sales(selectSelected)
           graph = py_offline.plot(fig, include_plotlyjs=False, output_type='div', show_link=False)
           return json.dumps({ 'graph': graph, 'listUnits':listUnits.reset_index().to_json(orient='records')})

问题是,假设从$角度使两次$ http帖子,瓶子路线运行两次。 这是来自服务器的代码。

秒:92 127.0.0.1 - - [12 / Sep / 2016 09:46:35]“POST / updateGraph HTTP / 1.1”200 - 秒:110 127.0.0.1 - - [12 / Sep / 2016 09:47:02] “POST / updateGraph HTTP / 1.1”200 -

我想让$ http post请求只允许一个请求,或者让flask为每个用户只运行一个路由。 这可能通过烧瓶吗? 如果不是,角度最好的方法是什么?


从你对情况的描述来看,这是在客户端更好解决的问题。

如果有任务正在进行,我只需设置一个标志(在全局或类级别上定义它)。 例如:

if (processing) {
    return;
}
processing = true;
$http.post('/updateGraph', $scope.graphingParameters).success(function(response) {
        $scope.graphingParameters.graph = response.graph;
        $scope.listUnits = JSON.parse(response.listUnits);
        $scope.myHTML = $sce.trustAsHtml($scope.graphingParameters.graph);
        $scope.showME = true;
        processing = false;
    })

这个实现也可以用来隐藏/禁用按钮,或者不管怎样触发用户请求,以便在有持续请求时不能触发它。

请注意,我对角1并不是很熟悉,因此您可能希望在请求后触发processing = false ,而不仅仅是success


你可以看看使用Redis和python-rq等实现任务或工作队列。

实质上,当路线运行时,不是立即执行工作,而是将任务排队(在这种情况下,更新图形)以异步运行。 通过这种方式,您可以确保图形以原子方式更新,或使用您选择的其他条件(例如,每十分钟一次)更新。

链接地址: http://www.djcxy.com/p/71897.html

上一篇: Allow only one flask request for a particular route

下一篇: template won't work on Heroku