只允许一个烧瓶请求一个特定的路线
我有一个使用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