Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中的自定义登录表单尝试创建新用户,而不是登录用户_Django_Python 3.x - Fatal编程技术网

Django中的自定义登录表单尝试创建新用户,而不是登录用户

Django中的自定义登录表单尝试创建新用户,而不是登录用户,django,python-3.x,Django,Python 3.x,我建立了一个自定义用户类,我使用所有自定义用户管理模板、视图、URL等。。。除了我的登录视图之外,它们都可以工作。我可以通过直接从请求中提取用户名和密码并跳过表单清理来让它工作。然而,这听起来是个非常糟糕的主意 当我尝试使用forms.is_valid()时,函数会给出错误信息,表明它正在尝试创建新用户,而不是登录现有用户。我已经环顾四周,做了几个小时的尝试和错误现在,我仍然不知道为什么它这样做,为什么没有人似乎关心清理他们的登录表单 以下是我的登录视图: def loginView(reque

我建立了一个自定义用户类,我使用所有自定义用户管理模板、视图、URL等。。。除了我的登录视图之外,它们都可以工作。我可以通过直接从请求中提取用户名和密码并跳过表单清理来让它工作。然而,这听起来是个非常糟糕的主意

当我尝试使用forms.is_valid()时,函数会给出错误信息,表明它正在尝试创建新用户,而不是登录现有用户。我已经环顾四周,做了几个小时的尝试和错误现在,我仍然不知道为什么它这样做,为什么没有人似乎关心清理他们的登录表单

以下是我的登录视图:

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()
方法不仅清理字段,而且实际验证用户并验证用户是否允许登录(
处于活动状态
)。因此,一旦表单有效,视图只需执行
登录