2017-03-25 22 views
0

Djangoアプリケーションの開発に取り掛かりました.Djangoアプリケーションでは、カスタムスクリプトを別のサーバーで実行するためのWEB UIが必要で、リアルタイムでUIの出力を確認する必要があります。 Importentはステップバイステップスクリプトの実行を表示します。問題は - どのようにスクリプト出力(プリント、Pythonスクリプトのロガー)をチャンネルにリダイレクトしてクライアントにプッシュするのですか?リアルタイムアプリケーションのDjangoチャンネル

+0

クライアント側からサーバー側にajaxリクエストを行うことでこれを行うことはできません。 – Blaze

+0

この場合、私はどこかの出力を保存し、毎秒ajaxリクエストを作成する必要があります。多分それはまた黙想です。どのように私はajaxで使用されるスクリプトの出力をリダイレクトできますか?多分あなたはいくつかの例を持っています –

答えて

1

私はDjangoアプリケーションで作業していませんが、MVCフレームワークなので、私の答えはあなたの質問に関連していると思います。

コントローラにajaxコール(多分jqueryで)を呼び出すと、あなたのスクリプトを起動することができます。私はこれを行うには2つの方法があると思う。

まず、異なるサーバーサイドスクリプトを呼び出す異なるコントローラにシリアルajax要求を行うことです。例:第2の方法では

// Javascript 
$.ajax({ 
     url: '/controller1/', 
     data: { 
      payload: "Anything" 
      // some payload that you may want to pass to controller 
      // optional 
     }, 
     dataType: 'json', 
     success: function (data) { 
      // assess results of your call 
      } 
     } 
     }); 


$.ajax({ 
     url: '/controller2/', 
     data: { 
      payload: "something" 
      // some payload that you may want to pass to controller 
      // optional 
     }, 
     dataType: 'json', 
     success: function (data) { 
      // assess results of your call 
      } 
     } 
     }); 


# ==== Python ========= 
from django.http import JsonResponse 

def controller1(request): 
    # get data passed along with ajax request 
    dataFromClient = request.GET.get('payload', None) 

    # send that data to your script, for processing, if required 
    resultFromScript = Script1(dataFromClient) 

    #return processed data back to client 
    return JsonResponse(resultFromScript) 

def controller2(request): 
    # Similar structure 

、あなたは1つのコントローラに、一度に外部スクリプトが必要とするすべてのペイロードを転送し、そのコントローラのコール他のスクリプトを聞かせて、別の変数にその結果を保存することができます。最後に、さまざまな変数から結果をシリアル化し、JSONとしてクライアントに戻します。

私はこれがあなたにいくつかの洞察を提供してくれることを願っています。

+0

しかし、この場合、完成すると、ajaxはスクリプトのoitputを取得します。しかし、私は一歩一歩踏み出す必要があります。例えば、私はpythonスクリプトを実行する必要がありますが、「印刷」はほとんどありません。スクリプトが終了するのを待つのではなく、ひとつずつプリントを見たいのです。 –

+1

本当に、私はこれがあなたが望んだと思った。あなたの問題のステートメントは "websockets"にもっと適していると思います。あなたのケースでは、クライアントがサーバから新しいデータをpingすることはあまり実用的ではありません。その代わりに、WebSocketを作成して、クライアント側のpingスクリプトで新しいデータをプッシュできるようにします。ここでそれらについて読む:https://www.fullstackpython.com/websockets.html – Blaze

+0

あなたはterm.jsのようなものを考えるかもしれません。それはあなたが行っているユースケースのようなものなら、出力を表示するための端末コンソールを表示することができます。 – Ivan

関連する問題