繁体   English   中英

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

[英]Allow only one flask request for a particular route

我有一个使用angularjs前端的flask应用程序。 我通过$ 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;
    })

flask中的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--[2016年9月12日09:46:35]“ POST / updateGraph HTTP / 1.1” 200-秒:110 127.0.0.1--[2016年9月12日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不太熟悉,因此您可能希望在请求之后(不仅在success触发该processing = false

您可以考虑使用Redis和python-rq类的东西来实现任务或工作队列。

本质上,当路由运行时,而不是立即执行工作,而是将一个任务(在本例中为更新图形)排队以异步运行。 这样,您可以确保自动更新图形,或使用您选择的其他标准(例如,每十分钟仅更新一次)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM