如何实时显示amcharts和django的数据?

时间:2014-04-19 02:21:52

标签: python django amcharts

我希望图表刷新本身(不是刷新整个网页),就像心脏监视器一样,每次有新数据添加到数据库时,这可能吗?

使用以下代码,我必须刷新网页,看看是否有任何新数据。

views.py:

from tempsensors.models import temp

def temp_page(request):
#this view is to store the temperature value into my database
#data is send by my board with a temperature sensor
if request.method == 'POST' and 'tem' in request.POST and request.POST['tem']:
    temp_value = float(request.POST['tem']) 
    temp_add = temp(temp=temp_value)
    temp_add.save()
else:
#only for post data
    raise Http404
return render_to_response("temp.html",locals(),context_instance=RequestContext(request))

def chart_page(request):
    #this view will display a chart
    temps = temp.objects.all()
    # formatting JSON file
    prefix = ''
    chartData = "[" 
    for t in temps:
        chartData += prefix
        chartData += "{\n" 
        chartData += "                      date: "
        chartData += "new Date(" + str(t.temp_date.year) + "," 
        chartData += str(t.temp_date.month-1) + "," 
        chartData += str(t.temp_date.day) + "," 
        chartData += str(t.temp_date.hour) + "," 
        chartData += str(t.temp_date.minute) + "),\n"
        chartData += "                      value: "
        chartData += str(t.temp) + "\n                      }"
        prefix = ", "
    chartData += "]" 
    temp_now = temp.objects.order_by("-id")[0].temp
    return render_to_response('chart.html', locals())

chart.html

var chartData = {{chartData}}
chart.dataProvider = chartData;

2 个答案:

答案 0 :(得分:1)

如果您希望数据以“实时”方式流式传输到页面,那么您将需要一些框架来执行此操作。 Django是关于生成html的,它将返回页面请求时所需的数据,但你想要的是POST后的数据传输。为此,我建议您查看socket.io。可以找到一个很好的示例项目,帮助我理解它如何与django集成here on github

希望这有助于您入门。

答案 1 :(得分:0)

我无法专门为Django或Amcharts发言,但总的来说这就是你想要做的事情。

在您的客户端网页中,您需要定期对Web服务器进行AJAX调用,以获取完整的,最新的数据集或仅获取最新的数据点。如果您愿意,可以使用jQuery或更多原始Javascript来实现AJAX调用。使用客户端上的新数据集(或数据点),更新Amchart。

另一种更实时的方法是使用Web套接字并从客户端建立与服务器的连接。 Web套接字保持连接打开,以便服务器可以基本上将新数据点推送到客户端。当然,这可能取决于您的主机以及它们是否支持使用Web套接字。您需要在服务器端以及客户端上使用适当的库。