2014-11-14 101 views
6

我正在使用jQuery函數發佈一個帶有Ajax的登錄表單。在ajax成功:我想要處理不同的響應,如果它是一個成功的登錄或不。Django使用Ajax登錄?

所以在Django我不知道如果我可以建立在現有的登錄視圖中添加一些成功/錯誤變量與返回的頁面一起發回的jQuery功能。我的意思是保持視圖,因爲它默認工作,但也添加一個額外的「狀態」變量。

這方面的一個小例子將是巨大的!

回答

0

您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

謝謝!我已經使用djangos登錄視圖,如果登錄成功,將返回重定向到配置文件,否則返回表單+錯誤。所以我仍然希望默認功能在那裏添加額外的「狀態」的返回,以便jquery可以將失敗的形式放在同一個div或另一個div中的配置文件。 – user3199840 2014-11-14 15:31:17

3

您需要設置一個jQuery的Ajax調用張貼到在Django您登錄視圖。

在你需要做這樣的事情的看法...

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

我沒有測試過這一點,但你Ajax調用應該是這個樣子。

<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

謝謝!這個例子是否擴展了現有的登錄視圖,還是必須創建一個指向這個新視圖的新url?我已經在使用django.contrib.auth.views.login進行身份驗證。我需要保持功能。它返回一個錯誤的表單(登錄失敗)或(成功)的一個配置文件。我只是想把結果與jQuery不同的div。 – user3199840 2014-11-14 14:49:53