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

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

person dave    schedule 07.08.2011    source источник
comment
Я не понимаю вашего вопроса. Похоже, что ваш вид монитора предназначен для спокойного интерфейса, где сообщение в форме возвращает файл csv? Где твой амчарт?   -  person Rob Osborne    schedule 07.08.2011
comment
Это мой вопрос. Я вернул файл csv для проверки своих запросов. Мне нужно вернуть график amchart.   -  person dave    schedule 07.08.2011


Ответы (2)


Хорошо, у вас уже работает часть Django. Теперь вам нужно передать это в средство визуализации javascript amcharts на стороне клиента. См. эту статью в блоге, чтобы узнать, как это сделать. . Вам нужно заменить 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 вместо этого.

person Rob Osborne    schedule 07.08.2011
comment
Должен ли я загружать и распаковывать amcharts в свой проект django? - person dave; 07.08.2011
comment
Да. Вам нужно будет загрузить их javascript. Не уверен, что у них есть доступная по всему миру ссылка для скачивания, но я всегда размещаю свои собственные. - person Rob Osborne; 07.08.2011
comment
Что вы имеете в виду, говоря, что я всегда размещаю свои собственные? - person dave; 08.08.2011
comment
Извините, я размещаю собственную копию этих типов файлов. например. Я не получаю jquery от Google, я размещаю его сам. - person Rob Osborne; 08.08.2011
comment
Как я могу написать в представлении часть httpresponse, чтобы отправить соответствующие данные в HTML-файл JS? Я новичок в Django. - person dave; 08.08.2011
comment
У тебя уже есть! Вам нужно изменить функцию javascript loadCSV для публикации на ваш URL-адрес, а не на получение, которое в настоящее время существует. - person Rob Osborne; 08.08.2011
comment
Я имел в виду, что есть способ передать данные напрямую из представления в клиент javascript-flash без файла csv. Как это сделать? HttpResponse в представлении и html javascript flash файл. Как? - person dave; 08.08.2011
comment
Ах. Я отвечу на это в другом ответе. - person Rob Osborne; 08.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 %}

];

И передайте сервисную статистику в этот шаблон.

person Rob Osborne    schedule 08.08.2011
comment
Как передать сервисную статистику в представление для шаблона javascript? - person dave; 10.08.2011
comment
Другими словами, нужно ли мне отправлять из представления django HTTPresponseredirect с данными servicestats в шаблон html javascript? как мне написать это прохождение в представлении? - person dave; 10.08.2011
comment
Кстати, мне кажется, что было бы лучше передать dtime и другие значения данных, уже полученные в представлении, а не статистику сервисов набора запросов. Как мне написать это в моем представлении? Спасибо. - person dave; 10.08.2011
comment
используйте {'form': form, 'serverstats': servicestats} в render_to_response вместо возврата csv - person Rob Osborne; 10.08.2011
comment
Какая форма? Форма используется только при отсутствии POST-запроса (до POST-запроса). - person dave; 10.08.2011