2011-08-31 35 views
1

我正在寫django應用程序,作爲beckend使用mongodb。我正在寫註冊部分。這裏是我在settings.pypymongo和django唯一值的問題

if socket.gethostname() == "Production server": 
    CON = Connection() 
    DB = CON.fish 
else: 
    CON = Connection() 
    DB = CON.test 
DB.user.ensure_index([("username", ASCENDING),("email",ASCENDING)],unique = True)#,drop_dups=True 

這裏connecto到數據庫MYE寄存器觀點:

def register(request): 
    """ 
    handle user registration 
    code variable is for testing purposes 
    """ 
    if request.method== 'GET': 
     form = RegisterForm(auto_id=False) 
     code = 1 
     return render_to_response('register_home.html',locals(),context_instance=RequestContext(request)) 
    elif request.method == 'POST': 
     form = RegisterForm(request.POST) 
     if form.is_valid(): 
      password = form.cleaned_data['password'] 
      password_confirmation = form.cleaned_data['password_confirmation'] 
      if password == password_confirmation: 
       login = form.cleaned_data['login'] 
       email = form.cleaned_data['email'] 
       newsletter = form.cleaned_data['newsletter'] 
       key = register_user(login,email,password,newsletter) 
       if key: 

        #send email 
        send_mail("Dziękujemy za rejestrację"," Klucz aktywacyjny to " + key,settings.EMAIL_HOST_USER,[email]) 
        request.session['email'] = email 
        return redirect(register_success) 
       else: 
        code = 4 
        error = "Login/email taken" 
        return render_to_response('register_home.html',locals(),context_instance=RequestContext(request)) 
      else: 
       code = 3 
       error = "invalid password" 
       return render_to_response('register_home.html',locals(),context_instance=RequestContext(request)) 
     else: 
      code = 2 
      return render_to_response('register_home.html',locals(),context_instance=RequestContext(request)) 

這裏是我的功能,我用它來註冊用戶:

def register_user(login,email,password,newsletter): 
    """ 
    This function will return activation key for this user if user was added successfully or none otherwise 
    """ 
    key = generate_activation_key() 
    user = { 
     "username":login, 
     "email":email, 
     "password":crypt_password(password), 
     "date_join": datetime.now(), 
     "key": key 
    } 
    if newsletter: 
     user['newsletter'] = True 
    try: 
     settings.DB.user.insert(user,safe = True) 
    except DuplicateKeyError, error: 
     logging.debug("error raise during saving user") 
     return None 
    except OperationFailure, error: 
     logging.critical("Cannot save to database") 
     logging.critical(error) 
    else: 
     #we have no errors users is registred 
     return key 

當我在瀏覽器中測試它似乎正在工作。但我爲它寫測試,並且它不再工作。下面是測試代碼:

def test_valid_credentials(self): 
     #now try to register valid user 
     data = {'login':'test','password':'zaq12wsx','password_confirmation':'zaq12wsx','terms':True,'newsletter':True,'email':'[email protected]'} 
     response = self.c.post(reverse('register'),data) 
     #our user should be registred 
     self.assertEquals(302, response.status_code,'We dont have benn redirected') 
     self.assertEqual(len(mail.outbox), 1,'No activation email was sent') 
     #clen email box 
     mail.outbox = [] 
     #now try to add another user with the same data 
     response = self.c.post(reverse('register'),data) 
     #template should be rendered with error message about used login and email 
     self.assertEquals(200, response.status_code)#this fails 

這裏是錯誤,我得到。

self.assertEquals(200, response.status_code) 
AssertionError: 200 != 302 

因此,用戶被註冊時使用的用戶名和電子郵件不會發生。任何消化?在此先感謝

回答