Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Python Django:keyrormat/login/_Python_Django_Django Forms_Django Views_Keyerror - Fatal编程技术网

Python Django:keyrormat/login/

Python Django:keyrormat/login/,python,django,django-forms,django-views,keyerror,Python,Django,Django Forms,Django Views,Keyerror,当我在我的登录表单上按submit时,我得到了错误“KeyError at/login/”,我对关键错误做了一些研究,并了解到字典中缺少一个键是令人不高兴的 在这种情况下,它指向特定的代码行(这很有意义): 以下是我的观点.py: 从django.contrib.auth导入获取用户模型、身份验证、登录、注销 从django.shortcuts导入渲染,HttpResponseRedirect 从.forms导入LoginForm,注册执行 #在这里创建您的视图 User = get_user_

当我在我的登录表单上按submit时,我得到了错误“KeyError at/login/”,我对关键错误做了一些研究,并了解到字典中缺少一个键是令人不高兴的

在这种情况下,它指向特定的代码行(这很有意义):

以下是我的观点.py:

从django.contrib.auth导入获取用户模型、身份验证、登录、注销 从django.shortcuts导入渲染,HttpResponseRedirect 从.forms导入LoginForm,注册执行 #在这里创建您的视图

User = get_user_model()

def mylogin(request):
   form = LoginForm(request.POST or None)

   if form.is_valid():

       password = form.cleaned_data['password']

    try:
        the_user = User.objects.get(username=username_email)
    except User.DoesNotExist:
        the_user = User.objects.get(email=username_email)
    except:
        the_user = None

    if the_user is not None:    
        user = authenticate(username = the_user.username, password = password)

        if user.is_active:
            login(request, user)
            #return HttpResponseRedirect('/home/')
        else:
            print inactive
            #reactivate
    else: 
        #not an account
        return HttpResponseRedirect('/register/')

   context = {'form': form,
            'head_title': "Login"
        }
   return render(request, "form.html", context)

def register(request):
   form = RegisterForm(request.POST or None)

   if form.is_valid():
        username = form.cleaned_data['username']
        email = form.cleaned_data['email']
        password = form.cleaned_data['password']
        new_user = User.objects.create_user(username, email, password)

    context = {'form': form,
                'head_title': "Register"
    }
    return render(request, "form.html", context)


def mylogout(request):
   logout(request)
   return HttpResponseRedirect('/login/')
以下是相关表格.py:

from django import forms 
from django.contrib.auth import get_user_model

User = get_user_model()

class LoginForm(forms.Form):
    username_email = forms.CharField(label='Username or Email')
    password = forms.CharField(widget=forms.PasswordInput)

class RegisterForm(forms.Form):
    username = forms.CharField()
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)
    confirm_password = forms.CharField(widget=forms.PasswordInput)

def clean_username(self):
    username = self.cleaned_data['username']
    if User.objects.filter(username=username).exists():
        raise forms.ValidationError("Username %s already exists" %(username))
    return username

def clean_email(self):
    email = self.cleaned_data['email']
    if User.objects.filter(email=email).exists():
        raise forms.ValidationError("Email %s already exists. Did you forget your password?" %(email))
    return email

def clean(self):
    cleaned_data = super(RegisterForm, self).clean()
    password = cleaned_data.get("password")
    confirm_password = cleaned_data.get("confirm_password")

    if password != confirm_password:
        self._errors["password"] = self.error_class(["Passwords do not match"])
        del cleaned_data['password']
        del cleaned_data['confirm_password']

    return cleaned_data

如果你能帮助我,请告诉我。在这个阶段,我不确定我是否遗漏了一个明显的错误,或者是否遗漏了一个基本的逻辑错误。谢谢

正如@Jingo所说,您的代码正在表单中搜索
username
变量

if form.is_valid():
        username = form.cleaned_data['username']
但是您的表单包含
username\u email
var,而不是username:

 class LoginForm(forms.Form):
    username_email = forms.CharField(label='Username or Email')
    password = forms.CharField(widget=forms.PasswordInput)

因此,在表单或其他代码中更改var名称。这应该会有所帮助。

您的登录表单不提供字段用户名,而是使用用户名\电子邮件。
 class LoginForm(forms.Form):
    username_email = forms.CharField(label='Username or Email')
    password = forms.CharField(widget=forms.PasswordInput)