【问题标题】:Django channels for real time app实时应用程序的 Django 频道
【发布时间】:2017-03-25 09:16:15
【问题描述】:

我已经开始开发 Django 应用程序,它应该有一个 WEB UI 来在另一台服务器上运行我的自定义脚本,我需要在 UI 中实时查看输出。重要的是要逐步查看脚本执行。问题是 - 如何将脚本输出(python 脚本的打印、记录器)重定向到通道,然后将其推送到客户端?

【问题讨论】:

  • 你不会通过从客户端向服务器端发出 ajax 请求来做到这一点。
  • 在这种情况下,我需要存储某处的输出并每秒发出 ajax 请求,也许这也是一种解决方案。如何重定向将由 ajax 使用的脚本的输出?也许你有一些例子

标签: python django python-3.x


【解决方案1】:

我没有在 Django 应用程序上工作,但由于它是一个 MVC 框架,我想我的回答与您的问题相关。

您可以对您的控制器进行 ajax 调用(可能使用 jquery),从而启动您的脚本。我认为有两种方法可以做到这一点。

首先,是向不同的控制器发出串行 ajax 请求,这些控制器调用不同的服务器端脚本。例如:

// 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

在第二种方法中,您可以一次将外部脚本可能需要的所有有效负载传输到单个控制器,然后让该控制器调用其他脚本并将其结果存储在不同的变量中。最后将不同变量的结果序列化并以 JSON 格式传回客户端。

我希望这为您提供了一些见解。

【讨论】:

  • 但在这种情况下,一旦完成,ajax 将获取脚本的 oitput。但我需要一步一步地看到。例如,我需要运行带有少量“打印”的 python 脚本,并且我想一一查看这些打印,而不是等待脚本何时完成。
  • 没错,我认为这就是你想要的。我认为您的问题陈述更适合“websockets”。在您的情况下,客户端从服务器 ping 新数据看起来不太可行。相反,创建一个 websocket 并让服务器端脚本 ping 客户端以推送新数据。在这里阅读它们:fullstackpython.com/websockets.html
  • 你可以考虑类似 term.js 的东西;如果这是您要使用的用例,它将允许您显示终端控制台来显示您的输出。
  • 您是否有一些示例如何将脚本的输出(打印或日志记录)实时重定向到客户端“子进程”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2020-04-26
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2014-01-14
  • 2015-07-15
相关资源
最近更新 更多