2016-09-13 15 views
0

私は、anglejsフロントエンドを使用するフラスコアプリを持っています。 $ httpサービスを通じてhttpリクエストを行います。以下のコードに示すように。特定のルートに対して1つのフラスコ要求を許可する

$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投稿を角度から2回作成するとします。フラスコのルートは2回実行されています。これはサーバーのコードです。

秒:92 127.0.0.1 - - [12/9月/ 2016午前9時46分35秒] "POST/updateGraph HTTP/1.1" 200 - 秒:110 127.0.0.1 - - [12/9月/ 2016午前9時47分02秒]「POST/updateGraph HTTP/1.1」200 -

私は1つの要求を許可またはフラスコは、ユーザーごとに1つだけのルートを実行させるだけに$のHTTP POSTリクエストを作成するかしたいです。これはフラスコで可能ですか?角度からの最良のアプローチは何ですか?

答えて

1

状況の説明から、これはクライアント側でよりうまく解決できるものです。

すでにそのタスクの進行中のリクエストがある場合は、フラグを設定するだけです(グローバルレベルまたはクラスレベルで定義します)。たとえば:

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をトリガーすることもできます。

0

Redisとpython-rqのようなものを使用して、タスクまたは作業キューを実装することができます。

本質的には、ルートを実行するとすぐに作業するのではなく、タスク(この場合はグラフを更新する)をキューに入れて非同期に実行します。この方法で、グラフが原子的に更新されるようにするか、または選択した他の基準を使用して(たとえば、10分ごとに1回のみ)グラフを更新できます。

関連する問題