我在django + MongoDB上发布数据时出错

4zcjmb1e  于 2023-06-29  发布在  Go
关注(0)|答案(1)|浏览(119)

我使用的是Django + MongoDB。下面我附上了我的看法张贴我的数据在用户模型。

def register(request):
    try:
        if request.method == 'POST':
            name = request.POST.get('name')     
            print(name)       
            email = request.POST.get('email')         
            print(email)
            age = request.POST.get('age')
            print(age)
            qualification = request.POST.get('qualification')
            print(qualification)
            password = request.POST.get('password')
            print(password)
            hashed_password = make_password(password)
            role = request.POST.get('role')
            print(role)
            if role == 'student':
                is_student = True
                is_instructor = False
            if role == 'instructor':
                is_instructor = True
                is_student = False   
            user1 = User.objects.filter(email=email).first()
            # print(user1)
            if user1 is not None:
                print(2)
                message = "Email already in used."
                messages.add_message(request, messages.INFO, message)
                return render(request, 'signup.html') 
            user = User(email=email, name=name, age=age, qualification=qualification, password=hashed_password, is_student=is_student, is_instructor=is_instructor) 
            print(user) 
            user.save()
            request.session['email'] = email
            OTP_email(email)
            
            return redirect('otp')
        
        return render(request, 'signup.html')

在打印user时,我发现使用了多个print语句,它打印了None。我检查了是否是数据库的错误,可能用户模型没有定义,但我使用hasattr()方法检查了django shell,它返回True,所以有数据库模型名称User。现在我不明白为什么它打印None,而不是打印dict或List。
我尝试了多种方法来存储示例。

uqjltbpv

uqjltbpv1#

在给定代码中输出None的原因是,当没有用户匹配电子邮件时,User.objects.filter(email=email)的first()方法返回None。
代码正在尝试搜索与给定电子邮件地址相对应的用户。filter(email=email)搜索具有指定电子邮件的用户。first()方法返回搜索结果中的第一个用户,如果没有匹配项,则返回None。
因此,如果user1变量不是None,这意味着已经有一个用户使用该电子邮件,它将打印“Email already in use.”并呈现signup.html模板。
如果user1为None,表示没有用户使用该电子邮件,则代码将创建User模型的新示例,将其保存到数据库,并相应地继续。

相关问题