0

我需要将来自 HttpResponse 的数据显示为图表。(xaxis = datetime,yaxis 是一个聚合统计函数)。我成功地将数据导出到 csv 文件中。如何将 django 与 amcharts 集成?

def monitor(request):   
    if request.method == 'POST' :
    forms = ServicesForm(request.POST)
    if forms.is_valid():
        service = forms.cleaned_data['service']
        scale = forms.cleaned_data['scale']
        datatype = forms.cleaned_data['datatype']
        starttime = forms.cleaned_data['starttime']
        endtime = forms.cleaned_data['endtime']

        db_table = u'servicestats'
        name = Servicenames.objects.get(servicename=service)

        servicestats = Servicestats.objects.raw('SELECT distinct dtime,scale,' + datatype + ' FROM ' + db_table + ' WHERE scale = ' + str(scale) + ' AND dtime BETWEEN "' + str(starttime) + '" AND "' + str(endtime) + '" AND service_id = ' + str(name.id))  
        response = HttpResponse(mimetype='text/csv') 
        response['Content-Disposition'] = 'attachment;filename="export.csv"'         
        writer = csv.writer(response)
        for s in servicestats:
            if datatype =='cnt':
                writer.writerow([s.dtime,s.cnt])
            if datatype =='avg' :
                writer.writerow([s.dtime,s.avg])
            if datatype =='min' :
                writer.writerow([s.dtime,s.min])
            if datatype =='max' :
                writer.writerow([s.dtime,s.max])  
            if datatype =='threenines' :
                writer.writerow([s.dtime,s.threenines])   
        return response

else:
    forms =  ServicesForm


return render_to_response('monitor/monitor.html', {'forms':forms},
   context_instance = RequestContext(request)) 

template,html :
 <form action='/monitor/' method="post"> {%csrf_token%}
    {{ forms.as_p}}
    <input type = "submit" value = "Submit">    
</form>
4

2 回答 2

1

好的,你已经让 Django 部分工作了。现在您需要将其输入到客户端的 amcharts javascript 渲染器中。请参阅此博客文章了解如何执行此操作。您需要将 data.txt 替换为您的网址:

    window.onload = function() {
        loadCSV("data.txt");
    }

并将 loadCSV 从 get 修改为 post 到您上面的视图:

    function loadCSV(file) {
        if (window.XMLHttpRequest) {
            // IE7+, Firefox, Chrome, Opera, Safari
            var request = new XMLHttpRequest();
        }
        else {
            // code for IE6, IE5
            var request = new ActiveXObject('Microsoft.XMLHTTP');
        }
        // load
        request.open('GET', file, false);
        request.send();
        parseCSV(request.responseText);
    }

一个快速的谷歌提供了这个页面,了解如何修改该 request.open 以使用 post 代替。

于 2011-08-07T15:20:19.733 回答
0

使用此博客文章作为基础,您将使用 javascript 文件中生成的数组替换数据。基本上在您的新模板中执行此操作:

var dataprovider = [
{% for s in servicestats %}
       {date:s.dtime, value1:s.cnt, value2:s.min **more values here**}{% if not forloop.last %},{% endif %}
{% endfor %}

];

并将 servicestats 传递到该模板中。

于 2011-08-08T16:47:13.927 回答