Django表单无效

Django表单无效,django,login,Django,Login,我能够成功注册。用户注册后,他们将成功登录。但在那之后,单独登录就不起作用了。我几乎复制并粘贴了注册代码中的代码,我不知道这里出了什么问题 以下是forms.py: class UserForm(forms.ModelForm): password=forms.CharField(widget=forms.PasswordInput) class Meta: model=User fields=["username","password","em

我能够成功注册。用户注册后,他们将成功登录。但在那之后,单独登录就不起作用了。我几乎复制并粘贴了注册代码中的代码,我不知道这里出了什么问题

以下是forms.py:

class UserForm(forms.ModelForm):
    password=forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model=User
        fields=["username","password","email"]




class Login(forms.ModelForm):
    password=forms.CharField(widget=forms.PasswordInput)
    class Meta:
        model=User
        fields=["username","password"]
以下是views.py:

class singup(View):
    form_class=UserForm
    template_name='users/index.html'


    def get(self,request):
        form=self.form_class(None)
        return render(request,self.template_name,{'form':form})

    def post(self,request):
        form=self.form_class(request.POST)

        if form.is_valid():
            user=form.save(commit=False)

            username=form.cleaned_data['username']
            password=form.cleaned_data['password']

            user.set_password(password)

            user.save()

            user=authenticate(username=username,password=password)

            if user is not None:
                if user.is_active:
                    login(request,user)
                    return render(request,'home/index.html',{'username':username})

        return render(request, self.template_name, {'form': form})




class loginView(View):
    form_class=Login
    template_name='users/login.html'

    def get(self,request):
        form=self.form_class(None)
        return render(request,self.template_name,{'form':form})

    def post(self,request):
        form=self.form_class(request.POST)

        if form.is_valid():

            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            user = authenticate(username=username, password=password)


            login(request,user)

            return render(request, 'home/index.html')


        return render(request, self.template_name, {'form': form})
HTML代码:

"<h1> Sign In</h1>

<div class="container">
    {{ form.errors }}
    {{ form.non_field_errors }}

    <form action="" method="post">

        {% csrf_token %}
        username <input type="text" name="username" id="username">
        <br>
        <br>

        password <input type="password" name="password" id="password">
        <br>
        <br>


        <input type="submit" value="login">

    </form>
</div>"
“登录
{{form.errors}}
{{form.non_field_errors}}
{%csrf_令牌%}
用户名


密码

"

我认为这里的问题是它没有在loginView中输入“form.is_valid()”部分

在您的代码中,通过以下方式对用户进行身份验证后:

user = authenticate(username=username, password=password)
您需要添加两张支票

例如:

if not user:
    return False

if not user.is_active:
    retuen False
因为,当您通过“authenticate”函数对用户进行身份验证时,如果登录凭据正确,它将返回user对象,否则将返回None或AnnonymousUser


您需要确保登录凭据正确。

检查您用于创建用户的方法是
user.objects.create\u user(username=xxx,password=xxx)
而不是
user.objects.create(username=xxx,password=xxx)

显示您的表单并发布堆栈跟踪,非常感谢您的帮助。但我认为代码甚至没有进入“表单有效”部分。它只是跳转到“returnrender(request,self.template_name,{'form':form})”,它可能会在索引页上返回。请确保用户在注册时已正确注册。如果你能给我看一下注册码,我可以帮你。我已经编辑了这篇文章。我相信报名应该可以。因为当我填写注册表格时,它会被重定向到正确的页面。我也在管理页面和新用户显示中检查了这一点。非常感谢。谢谢你的评论。但我认为问题是表格无效。我不知道这是否与你在这里提到的有关