对于特定的rou,只允许一个Flask请求

2024-09-28 03:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用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函数如下。在

^{pr2}$

问题是假设让$httppost从angular两次,flask路由运行两次。这是来自服务器的代码。在

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

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


Tags: 代码httpflask路由烧瓶responsepostsep
2条回答

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

如果已经有一个针对该任务的请求正在进行,我只需要设置一个标志(在全局或类级别定义它)。例如:

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;
    })

这个实现还可以用来隐藏/禁用按钮或任何触发用户请求的东西,这样当有一个正在进行的请求时,用户就不能触发它。在

请注意,我对angular 1不太熟悉,所以您可能希望在请求之后触发processing = false,而不仅仅是在success上。在

您可以考虑使用Redis和^{}之类的东西来实现任务或工作队列。在

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

相关问题 更多 >

    热门问题