2014-11-14 18 views
6

Sto lavorando a una funzione jquery per pubblicare un modulo di accesso con ajax. Nel successo dell'ajax: voglio gestire la risposta in modo diverso se si tratta di un login di successo o meno.Login Django con Ajax?

Quindi in Django mi chiedo se posso costruire sulla vista login esistente per aggiungere qualche variabile di successo/errore da inviare alla funzione jquery insieme alla pagina restituita. Voglio dire mantenere la vista come funziona di default ma aggiungere anche una variabile "status" in più.

Un piccolo esempio di questo sarebbe fantastico!

risposta

0

tua views.py

def logmein(request): 
    username= request.GET.get('username') 
    password = request.GET.get('pwd') 
    stayloggedin = request.GET.get('stayloggedin') 
    if stayloggedin == "true": 
     pass 
    else: 
     request.session.set_expiry(0) 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      return HttpResponse('fine') 
     else: 
      return HttpResponse('inactive') 
    else: 
     return HttpResponse('bad') 

tua ajax

function logmein() { 
    var username = $.trim($('#username').val()); 
    var pwd = $.trim($('#pwdlogin').val()); 
    var stayloggedin = document.getElementById('stayloggedin').checked; 
    $.ajax({ 
     url : "/logmein/", 
     type : "get", 
     data : { 
      username: username, 
      pwd : pwd, 
      stayloggedin : stayloggedin, 
      next : next 
     } 
    }).done(function(data) { 
     if (data == "fine") { 
      window.location = window.location; 
     } 
    }); 
} 
+0

Grazie! Sto già usando la vista login djangos che restituirà un reindirizzamento al profilo se l'accesso è riuscito o il modulo + errori se non. Quindi voglio ancora la funzionalità di default ci solo aggiungere uno "status" extra al ritorno in modo che jquery possa mettere il modulo fallito nello stesso div o il profilo in un altro div. – user3199840

3

È necessario configurare un jQuery Ajax chiamata a inviare alla vista Entrata in Django.

Nella vista è necessario fare qualcosa di simile ...

import json 
from django.http import HttpResponse 

def login(request):                               
    if request.method == 'POST':                                                   
     login_form = AuthenticationForm(request, request.POST) 
     response_data = {}                    
     if login_form.is_valid():                           
      response_data['result'] = 'Success!' 
      response_data['message'] = 'You"re logged in' 
     else: 
      response_data['result'] = 'failed' 
      response_data['message'] = 'You messed up' 

     return HttpResponse(json.dumps(response_data), content_type="application/json") 

non ho ancora testato questo, ma sei chiamata AJAX dovrebbe essere simile a questo.

<script> 
$.ajax({                               
    type:"POST",                              
    url: 'http://www.yousite.com/yourview/login/',                         
    data: $('#login_form').serialize(),                     
    success: function(response){ 
     // do something with response 
     response['result']; // equals 'Success or failed'; 
     response['message'] // equals 'you"re logged in or You messed up';                          
    }                                
}); 
</script> 
+0

Grazie! Questo esempio estende la vista di accesso esistente o devo creare un nuovo url che punti a questa nuova vista? Sto già usando django.contrib.auth.views.login per l'autenticazione. Ho bisogno di mantenere la funzionalità. Restituisce un modulo con errore (su login fallito) o un profilo su (sucess). Voglio solo mettere i risultati in div diverse con jquery. – user3199840