2014-03-03 39 views
6

我目前有一个很长的运行脚本,它会产生各种输出。我想要做的是当我的webapp上的一个按钮被按下时,这个脚本运行,并且输出能够实时显示在网页的文本区域中。我想知道用Django实现这个最简单的方法。打印输出到网页Django

+2

看一看:http://stackoverflow.com/questions/4787530/does-django-have-a-way-to-open-a-http-long-poll-connection – alecxe

+0

有没有非常简单的方法来这样做,所以你可能会得到几个完全不同的答案,这些答案都是针对不同的,更具体的问题的解决方案。有关您的要求的更多信息(您需要的实时时间有多近?您是否期望不断的流式输出或仅需要立即显示的偶然输出? –

回答

1

你需要的是一个WebSocket!不是由django直接支持,但我建议看看Websockets for Django applications using Redis。我以前使用过这个,设置和使用起来非常简单。

例如创建一个Django的模板(如output.html):

<html> 
... 
<body> 
    <textarea id="output" row=3 cols=25></textarea> 

    <script> 
    var ws = new WebSocket('{{ ws_url }}'); 
    ws.onmessage = function(e) { 
     $('#output').append(e.data); 
    }; 
    </script> 
</body> 
</html> 

然后创造出你的脚本调用,只要它想输出消息到文本区的方法:

def output_message(session_key, user, message): 
    conn = redis.StrictRedis() 
    ws_url = '{0}:{1}'.format(session_key, user) 
    conn.publish(ws_url, message) 

而且最后,您需要在您的views.py中指定一种呈现output.html模板的方法:

def output_console(request): 
    template_values = {'ws_url':'ws://{SERVER_NAME}:{SERVER_PORT}/ws/{0}?subscribe-session'.format(request.user.id, **request.META)} 
    return render(request, 'output.html', template_values) 

查看项目git repo上的chat server以获得更深入的代码示例。

希望有所帮助,祝你好运!

0

如果你在谈论实时输出,那么你需要使用AJAX。

要设置脚本,在网页上您可以有一个按钮发送一个AJAX请求。

function ajax_call_model(data_JSON_Request, object_id){ 
    $(function jQuery_AJAX_model(){ 
     $.ajax({ 
      type: 'GET', 
      url: '/ajax_request/', 
      data: something, 
      datatype: "json", 
      success: function(data) { 
      $("#output_id").html(data); 
      },//success 
      error: function() {alert("failed...");} 
     });//.ajax 
     });//jQuery_AJAX 
    };//ajax_call 

在视图中,您将有这样的事情:

def ajax_request(request): 
    something = request.GET.get('something', '')# Receives from AJAX 
    output = #Does something with the request 
    jsonDump = json.dumps(str(output)) 

    return HttpResponse(jsonDump, content_type='application/json')