我目前有一个长时间运行的脚本,它产生各种输出。我想要做的是让这个脚本运行时,我的网页上的一个按钮,并为输出实时显示在网页上的文本区域。我想知道使用Django实现这个目标的最简单方法。
发布于 2014-03-03 21:26:23
你需要的是一个WebSocket!django不直接支持它,但我建议您看看使用Redis实现Django应用程序的Websockets。我以前用过这个,它很容易设置和使用。
例如,创建一个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上的聊天服务器。
希望那会有所帮助,祝你好运!
发布于 2014-03-03 18:01:55
如果您讨论的是实时输出,则需要使用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') https://stackoverflow.com/questions/22153070
复制相似问题