Django中的自定义登录表单尝试创建新用户,而不是登录用户
我建立了一个自定义用户类,我使用所有自定义用户管理模板、视图、URL等。。。除了我的登录视图之外,它们都可以工作。我可以通过直接从请求中提取用户名和密码并跳过表单清理来让它工作。然而,这听起来是个非常糟糕的主意 当我尝试使用forms.is_valid()时,函数会给出错误信息,表明它正在尝试创建新用户,而不是登录现有用户。我已经环顾四周,做了几个小时的尝试和错误现在,我仍然不知道为什么它这样做,为什么没有人似乎关心清理他们的登录表单 以下是我的登录视图:Django中的自定义登录表单尝试创建新用户,而不是登录用户,django,python-3.x,Django,Python 3.x,我建立了一个自定义用户类,我使用所有自定义用户管理模板、视图、URL等。。。除了我的登录视图之外,它们都可以工作。我可以通过直接从请求中提取用户名和密码并跳过表单清理来让它工作。然而,这听起来是个非常糟糕的主意 当我尝试使用forms.is_valid()时,函数会给出错误信息,表明它正在尝试创建新用户,而不是登录现有用户。我已经环顾四周,做了几个小时的尝试和错误现在,我仍然不知道为什么它这样做,为什么没有人似乎关心清理他们的登录表单 以下是我的登录视图: def loginView(reque
def loginView(request):
if not request.user.is_authenticated:
if request.method == 'POST':
form = forms.LoginForm(request.POST)
authError = False
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
post = CustomUser.objects.filter(username=username)
if post:
username = form.cleaned_data.get('username')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('home')
else:
authError = True
print("form failed")
#print(form)
#print(form.errors)
return render(request, 'login.html', context={'form': form, 'form_errors': form.errors, "auth_error": authError})
else:
print("get request")
form = forms.LoginForm()
print(form)
return render(request, 'login.html', context={'form': form})
else:
return redirect('home')
这是我的表格:
class LoginForm(forms.ModelForm):
class Meta:
model = CustomUser
fields = ['username', 'password']
widgets = {'password': forms.PasswordInput()}
不要使用
ModelForm
,因为您的登录表单没有编辑/创建用户。只需使用一个普通的表单
即可定义用户名
和密码
字段。查看django.contrib.auth.forms.AuthenticationForm
获取灵感。表单的clean()
方法不仅清理字段,而且实际验证用户并验证用户是否允许登录(处于活动状态
)。因此,一旦表单有效,视图只需执行登录
。