Django表单无效
我能够成功注册。用户注册后,他们将成功登录。但在那之后,单独登录就不起作用了。我几乎复制并粘贴了注册代码中的代码,我不知道这里出了什么问题 以下是forms.py: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
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})”,它可能会在索引页上返回。请确保用户在注册时已正确注册。如果你能给我看一下注册码,我可以帮你。我已经编辑了这篇文章。我相信报名应该可以。因为当我填写注册表格时,它会被重定向到正确的页面。我也在管理页面和新用户显示中检查了这一点。非常感谢。谢谢你的评论。但我认为问题是表格无效。我不知道这是否与你在这里提到的有关