интеграция amcharts с django - PullRequest
       0

интеграция amcharts с django

0 голосов
/ 07 августа 2011

Мне нужно отобразить данные из 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>

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Хорошо, у вас уже работает часть Django. Теперь вам нужно передать это в рендерер amcharts javascript на стороне клиента. Смотрите статью блога , чтобы узнать, как это сделать. Вам необходимо заменить data.txt на ваш URL:

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

и измените loadCSV из сообщения, которое вы видите выше:

    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);
    }

Быстрый Google предоставляет эту страницу о том, как изменить этот request.open, чтобы использовать вместо него post.

0 голосов
/ 08 августа 2011

Используя эту статью блога в качестве основы, вы собираетесь заменить данные массивом, сгенерированным в файле 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 %}

];

и передайте сервестесты в этот шаблон.

...