【问题标题】:Problem with pymongo and django unique valuepymongo 和 django 唯一值的问题
【发布时间】:2011-11-07 12:58:57
【问题描述】:

我正在编写一个使用 mongodb 的 django 应用程序。我正在写寄存器部分。这是我在 settings.py 中连接到数据库的方式

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

这是我的注册视图:

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':'test@test.com'}
        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

因此,用户注册时使用了相同的用户名和电子邮件,这不应该发生。有什么建议吗?提前致谢

【问题讨论】:

    标签: django unit-testing indexing pymongo


    【解决方案1】:

    你为什么不使用https://github.com/django-mongodb-engine/mongodb-engine 它几乎可以完美地与 Django ORM 配合使用。对我来说就像一个魅力。

    【讨论】:

    • 我不想要也不需要 ORM。直接使用 pymongo 对我来说很好,我不是在建立一个庞大的网站,只是一个简单的爱好者项目。
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多