Página 1 de 1

Django - Ayax

Publicado: Lun, 26 Nov 2012, 13:03
por lway
Hace un tiempo que vengo trabajando con Django, pero nunca he había tocado Ajax en jquery; lo cual es obligado hacer para que la Web mejore. Ahora estoy intentándolo mas no consigo que funcionen juntos. Necesito documentación y códigos testeados para probar y aprender. Espero que el tema les guste y que me ayuden.

Re: Django - Ayax

Publicado: Mar, 27 Nov 2012, 09:26
por lway
Lo primero que me llama la atención a la hora de ejecutar una consulta Ajax para Django es que las url de Django no se refieren en sí a un recurso en específico, por ejemplo: si se desea consultar el recurso "r.html" que se encuentra en "/static/r.html", no se pone dicha url, sino una url ficticia (podría ser "/resource") que luego llama a una vista, la cual retorna el recurso "r.html".


Pero según me han dicho Symfony tomo la misma filosofía de url, donde la url es virtual y no indica en sí misma a un recurso.

Re: Django - Ayax

Publicado: Mar, 26 Mar 2013, 15:26
por Barcelo
He realizado algunos trabajos con Django, pero he tocado muy poco ajax, pero les comento que se habla muy bien de "Dajaxie" (creo que así se llama).
investiguen... :idea:

Re: Django - Ayax

Publicado: Mié, 05 Jun 2013, 10:02
por lway
Luego de un tiempo de estudio regreso al foro para que conectarme con la gente. La conexión entre Django y Ajax se realiza a través del objeto Responde que tiene que retornar una View en Django. A este Response se le puede poner una cabecera mine-type que indique el recurso que se retorna.

Re: Django - Ayax

Publicado: Mié, 05 Jun 2013, 11:49
por ozkar
lway escribió:Luego de un tiempo de estudio regreso al foro para que conectarme con la gente. La conexión entre Django y Ajax se realiza a través del objeto Responde que tiene que retornar una View en Django. A este Response se le puede poner una cabecera mine-type que indique el recurso que se retorna.
Una forma muy, pero muy trivial de trabajar con Ajax en django es retornar tus consultas en formato json, una vista sencilla seria algo como:

Código: Seleccionar todo

from django.core import serializers

def ajax_city_request(request):
    try:
        data = serializers.serialize("json", City.objects.all())
    except:
        data = None
    return HttpResponse(data, mimetype="application/javascript")
Y desde tu javascript con jquery, pues tenemos un super-método llamado .getJSON().
Otra forma mucho mas trivial es, por ejemplo, con un login:

Código: Seleccionar todo

def loginsystem(request):
    if request.is_ajax():
        user = authenticate(username=request.POST['username'],
                            password=request.POST['passwd'])
        if user is not None:
            if user.is_staff:
                login(request, user)
                return HttpResponse('4')
                print 4
            else:
                return HttpResponse('2')
        else:
            return HttpResponse('3')
    else:
        return render_to_response('login.html',
                            RequestContext(request))
Y en tu javascript seria como:

Código: Seleccionar todo

<script>
  $("#form-login").submit(function(){
  var usuario = $("#username").val();
  var clave = $("#passwd").val();
  var dataString = $('#form-login').serialize();
    $.ajax({
      type: "POST",
      url: '{% url 'loginsystem' %}',
      data: dataString,
      success: function(msg){
        if (msg == 1){
            window.location = '{% url 'dashboard' %}';
        }
        if (msg == 4){
            window.location = '{% url 'dashboard_admin' %}';
        }
        if (msg == 2){
            $('#alert').removeClass("hide");
            $('#alert').removeClass("alert-error");
            $('#alert').addClass("alert-info");
            $('#alertheadingmsg').html('Información');
            $('#alertmsg').html('Su cuenta se encuentra desactivada');
        }
        if (msg == 3){
            $('#alert').removeClass("hide");
            $('#alert').removeClass("alert-info");
            $('#alert').addClass("alert-error");
            $('#alertheadingmsg').html('Error!!');
            $('#alertmsg').html('Usuario y/o clave no válida');
        }
      }
    });
    return false;
});
En esa view, como tengo varios user-levels, pues en dependencia de su nivel(staff, users) hago los redirect.
Saludos.