2014-11-14 32 views
6

ajax ile giriş formunu göndermek için bir jquery işlevi üzerinde çalışıyorum. Ajax başarısında: Başarılı bir giriş yapıp yapmadığımı yanıtı farklı şekilde ele almak istiyorum.Django Ajax ile giriş yap?

Django'da, geri dönen sayfa ile birlikte jquery işlevine geri göndermek için bazı başarı/hata değişkenleri eklemek için mevcut oturum açma görünümünü oluşturabilir miyim? Görünümü varsayılan olarak çalıştığından aynı zamanda ekstra bir "durum" değişkeni eklediğinden kastediyorum.

Bunun küçük bir örneği harika olurdu!

cevap

0

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

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

Teşekkürler! Zaten Djangos giriş başarılı olduğu veya form + hatalar değilse eğer profil için bir yönlendirme dönecektir görünümü giriş kullanıyorum. Yani ben hala jquery aynı div veya başka div profilinde başarısız formu koymak, böylece sadece getiri için fazladan "durumu" add orada varsayılan işlevselliğini istiyorum. – user3199840

3

Sen django içinde Girişi görünümüne göndermek için kurulum için bir jQuery Ajax arama gerekir. Eğer böyle bir şey yapmak gerekir görünümünde

...

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

Bunu test etmedim ama ajax çağrısı bu gibi görünmelidir konum.

<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

Teşekkürler! Bu örnek mevcut giriş görünümünü uzatıyor mu yoksa bu yeni görünüme işaret eden yeni bir URL yapmak zorunda mıyım? Kimlik doğrulama için zaten django.contrib.auth.views.login kullanıyorum. İşlevselliği korumam gerek. Hatalı bir form (başarısız girişte) veya bir profil (başarı) verir. Ben sadece sonuçları jquery ile farklı div koymak istiyorum. – user3199840

İlgili konular