[python] Django - AJAX & vypisování textového streamu

Martin Stiborský martin.stiborsky na gmail.com
Úterý Květen 10 22:25:50 CEST 2011


Ahoj,
nevěděl jsem úplně jistě jak tohle vlákno nazvat, tak snad to bude tak
nějak sedět.
Chci v Djangu takovou věc. View provádí nějakou akci a v jejím průběhu
vypisuje textový log o tom, jak mu to jde. Tyhle informace chci
postupně zobrazovat v administraci.
Ono to je celé jenom takový cukr, ale líbilo se mi to jako nápad,
akorát jsem se se na tom docela zaseknul.
Vymyslel jsem něco takového (a nakonec i vygooglil, že samozřejmě
nejsem první :) http://goo.gl/Pdpj0 )...

Takhle vypadá views.py:

from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.views.decorators.http import condition
import time

def index(request):
  return render_to_response("foo/index.html", {})

@condition(etag_func=None)
def getData(request):
  resp = HttpResponse(foo())
  return resp

def foo():
    for x in range(1, 11):
        yield "%s <br/>" % x
        time.sleep(1)

A v šabloně mám jednoduchý java script, využívá JQuery…

function getFooData() {
    $.ajax({
        type: 'POST',
        url: 'getData/',
        dataType: "json",
        success: function(data) {
            var $container = $("#messages");

            $container.append("Data: " + data);
            }
            });

    setTimeout("getFooData()", 2000);
}

Podobný postup jsem našel různě po internetu, blbé je, že to nefunguje
tak, jak si představuju. Když to spustím, tak django na konzoli píše u
/getData/ html kód 403/Forbidden...
Myslel jsem, že je něco shnilého v django-nonrel, se kterým si hraju
na google app engine, tak jsem to otestoval na django 1.3 a
nefungovalo to úplně stejně :)
Pokud máte někdo nápad, kde je problém, nebo proč je to principiálně
blbě, dejte vědět.

Děkuji.

-- 
S pozdravem
Martin Stiborský

Jabber: stibi na njs.netlab.cz


Další informace o konferenci Python