2014-11-14 18 views
6

Ich arbeite an einer jquery-Funktion, um ein Login-Formular mit Ajax zu posten. Im Ajax-Erfolg: Ich möchte die Antwort anders handhaben, wenn es ein erfolgreicher Login ist oder nicht.Django Einloggen mit Ajax?

Also in Django frage ich mich, ob ich auf der bestehenden Login-Ansicht aufbauen kann, um einige Erfolg/Fehler-Variable hinzuzufügen, um zurück zur jquery-Funktion zusammen mit der zurückgegebenen Seite zu senden. Ich meine, behalten Sie die Ansicht, wie es standardmäßig funktioniert, sondern fügen Sie auch eine zusätzliche Variable "Status" hinzu.

Ein kleines Beispiel dafür wäre großartig!

Antwort

0

Ihre 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') 

Ihre 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

Vielen Dank! Ich benutze bereits djangos Login-Ansicht, die eine Umleitung an das Profil zurückgibt, wenn die Anmeldung erfolgreich ist, oder die Form + Fehler wenn nicht. Also möchte ich immer noch die Standardfunktionalität dort hinzufügen nur einen zusätzlichen "Status", um die Rückkehr, so dass jquery kann das fehlerhafte Formular in der gleichen div oder das Profil in einem anderen div. – user3199840

3

Sie benötigen einen Jquery Ajax-Aufruf zu Setup Ihre Login-Ansicht in django zu posten.

In der Ansicht, die Sie so etwas wie dieses ... tun müssen

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") 

Ich habe nicht getestet, aber du bist sollte Ajax-Aufruf wie folgt aussehen.

<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

Danke! Erweitert dieses Beispiel die vorhandene Anmeldesicht oder muss ich eine neue URL erstellen, die auf diese neue Ansicht verweist? Ich verwende bereits django.contrib.auth.views.login für die Authentifizierung. Ich muss die Funktionalität behalten. Es gibt ein Formular mit Fehler (bei fehlgeschlagener Anmeldung) oder ein Profil bei (Erfolg) zurück. Ich möchte nur die Ergebnisse in verschiedenen Divs mit jQuery setzen. – user3199840