我希望图表刷新本身(不是刷新整个网页),就像心脏监视器一样,每次有新数据添加到数据库时,这可能吗?
使用以下代码,我必须刷新网页,看看是否有任何新数据。
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())
var chartData = {{chartData}}
chart.dataProvider = chartData;
答案 0 :(得分:1)
如果您希望数据以“实时”方式流式传输到页面,那么您将需要一些框架来执行此操作。 Django是关于生成html的,它将返回页面请求时所需的数据,但你想要的是POST后的数据传输。为此,我建议您查看socket.io。可以找到一个很好的示例项目,帮助我理解它如何与django集成here on github。
希望这有助于您入门。
答案 1 :(得分:0)
我无法专门为Django或Amcharts发言,但总的来说这就是你想要做的事情。
在您的客户端网页中,您需要定期对Web服务器进行AJAX调用,以获取完整的,最新的数据集或仅获取最新的数据点。如果您愿意,可以使用jQuery或更多原始Javascript来实现AJAX调用。使用客户端上的新数据集(或数据点),更新Amchart。
另一种更实时的方法是使用Web套接字并从客户端建立与服务器的连接。 Web套接字保持连接打开,以便服务器可以基本上将新数据点推送到客户端。当然,这可能取决于您的主机以及它们是否支持使用Web套接字。您需要在服务器端以及客户端上使用适当的库。