繁体   English   中英

Django forms is_valid() 用于注册,始终为假

[英]Django forms is_valid() for registration, always false

我还在学习 django,我正在尝试创建一个注册和登录页面。 我相信我创建了正确的表单,并且 the.is_valid() 对我来说也不错,我不知道我做错了什么。

每次我提交注册表单时,它都会失败并呈现 else 条件,与登录 function 相同,即使我进入管理员手动添加用户。

我的用户 model 被称为“用户”Forms:

class reg_form(forms.Form):
    username = forms.CharField(label='username', max_length=64)
    password = forms.CharField(widget=forms.PasswordInput)
    email = forms.EmailField(label="email", max_length=64)
    phone = forms.CharField(label='Phone', max_length=64)
    first_name = forms.CharField(label='First Name', max_length=64)
    last_name = forms.CharField(label='Last Name', max_length=64)

class log_form(forms.Form):
    username = forms.CharField(label='username', max_length=64)
    password = forms.CharField(widget=forms.PasswordInput)

登记:

def register(request):
    if request.method == 'POST':
        form = reg_form(request.POST)
        
        
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            email = form.cleaned_data['email']
            phone = form.cleaned_data['phone']
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            user = Users.objects.Create(username=username, email=email, password=password, phone=phone, first_name=first_name, last_name=last_name)
            Users.save(user)
            login(request, user)
            return render(request, 'profile.html')
        else:
            return render(request, 'register.html', {
            'form': reg_form 
            })
    else:
        return render(request, 'register.html', {
            'form': reg_form
        })
       

登录:

def log_in(request):
    if request.method == 'POST':
        form = log_form(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return render(request, 'profile.html')
            else:
                return render(request, 'login.html', {
                    'form2': log_form
                })
        else:
            return render(request, 'login.html', {
            'form2': log_form
            })
    else:
        return render(request, 'login.html', {
            'form2': log_form
        })

要查看错误,您应该返回Bound Form

def register(request):
    if request.method == 'POST':
        form = reg_form(request.POST)
   
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            email = form.cleaned_data.get'email')
            phone = form.cleaned_data.get('phone')
            first_name = form.cleaned_data.get('first_name')
            last_name = form.cleaned_data.get('last_name')
            user = Users.objects.create(
                username=username, email=email,
                password=password, phone=phone,
                first_name=first_name, last_name=last_name
            )
            login(request, user)
            return render(request, 'profile.html')
        else:
            return render(request, 'register.html', {
            # If the form not valid return bound form
            'form': form 
            })
    else:
        return render(request, 'register.html', {
            'form': reg_form
        })

并在您的log_in视图中执行相同的操作。


我建议你使用ModelForm

另请参阅编码风格Django 文档):

  • InitialCaps用于 class 名称(或用于返回类的工厂函数)。

  • 字段名称应全部小写,使用下划线而不是驼峰式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM