2012-08-02 59 views
0

作爲表單驗證的一部分,將比較password和password2。這是一個簡單的ajax請求系統的一部分,用於返回少量數據的非常小的站點(所以我不使用JSON)。該方案的想法/目標/總結是它試圖登錄用戶。如果用戶不存在,它會要求客戶端爲新用戶加載/顯示錶單(只是添加了password2字段並要求輸入筆名)。下面是該文件,我已經打上的運動,該計劃與#*********Django:當密碼檢查返回true時,密碼檢查返回false

Forms.py(錯誤不在這裏)凍結:

class new_user(forms.Form): 
    username = forms.EmailField() 
    password = forms.PasswordInput() 
    password2 = forms.PasswordInput() 
    pen_name = forms.CharField(max_length=30) 

Views.py,這裏的錯誤是:

def user_log_in(request): 
    #add stuff for ajax request 
    user_pass = log_in(request.POST) 
    er = [] 
    if user_pass.is_valid(): 
     print "valid" 
     cleaned_info = user_pass.cleaned_data 
     user_object = User.objects.filter(email = cleaned_info['username']) 
     if user_object.exists(): 
      logged_in_user = auth.authenticate(username=cleaned_info['username'], auth_password=cleaned_info['password']) 
      #add in is_active 
      if logged_in_user is not None: 
       auth.login(request, logged_in_user) 
       return HttpResponseRedirect('/home') 
      else: 
       er.append("Incorrect Password") 
     else: 
      new_user_pass = new_user(request.POST) 
      if new_user_pass.is_valid(): 
       cleaned_info_new = new_user_pass.cleaned_data 
       print "check points" 
       if cleaned_info_new['password'] == cleaned_info_new['password2']: #******** 
        print "clean" 
        new_user_query = creat_user(
         username=cleaned_info_new['username'], 
         password=cleaned_info_new['password'], 
         email=cleaned_info_new['username'] 
        ) 
        new_user_query.save() 
        msg = "" 
        try: 
         send_mail("Activate", msg, '[email protected]', 
          [cleaned_info['username']], fail_silently=False) 
        except: 
         er.append("Error Sending Email") 
       else: 
        er.append('Passwords are not the same') 
      elif "TN" in request.POST: 
       print "TN" 
       for e in new_user_pass.errors: 
        er.append(e) 
      #elif to check for is_active 
      else: 
       print "n_usr" 
       return HttpResponse('n_usr') 
    else: 
     for e in user_pass.errors: 
      er.append(e) 
     for e in er: 
      print"-" 
      print e 
      print"-" 
    return HttpResponse('SOS') 

Django的調試頁說以下內容:

KeyError at /ajax/login 'password' Request Method: POST Request URL: http://127.0.0.1:8000/ajax/login Django Version: 1.4 Python Executable: 

的交變的東西,在錯誤是這樣的(我刪掉了我的電子郵件和):

GET: No GET data POST: username = u'********@aol.com' TN = u'TN' password2 = u'test' password = u'test' pen_name = u'testing123' FILES: No FILES data 

爲了萬一問題出在這裏,我已經包含了javascript文件。

n_usr = false; 
function log_in() { 
    if(!$('#pass_enter').hasClass('#usr_enter')){ 
     password = $('#pass_enter').val(); 
    }else{ 
     password = ''; 
    } 
    if(!$('#usr_enter').hasClass('blur_field')){ 
     username = $('#usr_enter').val(); 
    }else{ 
     username = ''; 
    } 
    alert(username); 

    if(!n_usr){ 
     $.post('/ajax/login',{password: password, username: username}, function(data) { 
      if(data == "n_usr"){ 
       $('#new_user_entry').show('slow'); 
       n_usr = true; 
      } 
      else { 

      } 

     }) 
    }else { 
     if (!$('#pass_re_enter').hasClass('blur_field')){ 
       password2 = $('#pass_re_enter').val(); 
     }else { 
       password2 = ''; 
     } 
     if (!$('#pass_re_enter').hasClass('blur_field')){ 
      penname = $('#pen_enter').val(); 
     }else { 
      penname = ''; 
     } 
      $.post('/ajax/login', {password: password, password2: password2, username: username, pen_name: penname, TN: "TN"}, function(data) { 
       if(data == "e_act"){ 

       } else { 

       } 
      }); 
     } 
    } 
+0

如何聲明'new_user'表單? – 2012-08-02 06:05:39

+0

爲什麼不django的默認身份驗證? – 2012-08-02 06:07:56

+0

@Justanotherdunce我這樣做,只是這個表單不僅會登錄用戶,而且如果用戶沒有註冊,它會在用戶端請求額外的信息(如果Django返回n_usr,JQuery將顯示其餘的表單)。 – 2012-08-02 23:05:22

回答

0

我只注意到我在forms.py文件中使用了錯誤的字段。問題解決了。