自定义 Django-all 身份验证表单中的 KeyError
KeyError in customized Django-all auth form
我正在开发一个基于 Django 框架的网站。我选择 django-allauth 作为我的后端,并定制了它提供的标准登录表单,如下所示:
myapp/forms.py:
from allauth.account.forms import LoginForm, SignupForm
from django import forms
class MyLoginForm(LoginForm):
def __init__(self, *args,
**kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.fields['remember'].label = 'Remember me'
self.fields['remember'].initial = True
# To use a placeholder text we'll have to use below
login_widget = forms.TextInput(attrs={'type':'email',
'placeholder':
('Enter your email'),
'autofocus':'autofocus'
})
self.fields['email'] = forms.CharField(label=("Email"),
widget=login_widget)
self.fields['email'].label = 'Email'
def clean_email(self):
email = self.cleaned_data.get('email')
base, provider = email.split('@')
domain, extent = provider.split('.')
if extent == "edu":
forms.ValidationError("Please use a valid \
personal email address")
return email
class MySignUpForm(SignupForm):
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
这是我处理表单渲染的视图:
another_app/views.py:
from django.shortcuts import render
from userlogin.forms import MyLoginForm, MySignUpForm
def index(request):
login = MyLoginForm()
signup = MySignUpForm()
if request.method == "POST":
login = MyLoginForm(request.POST or None)
signup = MySignUpForm(request.POST or None)
if login.is_valid():
lg_instance = login.save(commit=False)
print (lg_instance)
context = {
'login': login,
'signup': signup,
'login_url': '/profile/'
}
return render(
request,
'homepage.html',
context,
)
根据以上信息,我有以下问题:
在我点击提交后,网站在 / 处显示 KeyError。这可能是什么原因造成的?回溯显示 'LoginForm' class(在 allauth/accounts/forms.py 中)有一个名为 Login 的字段导致冲突。
我如何实际登录用户并转到个人资料视图。
问题在于 MyLoginForm
初始化。从那里删除所有与电子邮件相关的代码。在 settings.py 中使用 ACCOUNT_AUTHENTICATION_METHOD = 'email'
,然后使用 __init__
方法仅覆盖占位符。检查 here django all auth 是否已经支持电子邮件。
我正在开发一个基于 Django 框架的网站。我选择 django-allauth 作为我的后端,并定制了它提供的标准登录表单,如下所示:
myapp/forms.py:
from allauth.account.forms import LoginForm, SignupForm
from django import forms
class MyLoginForm(LoginForm):
def __init__(self, *args,
**kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.fields['remember'].label = 'Remember me'
self.fields['remember'].initial = True
# To use a placeholder text we'll have to use below
login_widget = forms.TextInput(attrs={'type':'email',
'placeholder':
('Enter your email'),
'autofocus':'autofocus'
})
self.fields['email'] = forms.CharField(label=("Email"),
widget=login_widget)
self.fields['email'].label = 'Email'
def clean_email(self):
email = self.cleaned_data.get('email')
base, provider = email.split('@')
domain, extent = provider.split('.')
if extent == "edu":
forms.ValidationError("Please use a valid \
personal email address")
return email
class MySignUpForm(SignupForm):
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
这是我处理表单渲染的视图: another_app/views.py:
from django.shortcuts import render
from userlogin.forms import MyLoginForm, MySignUpForm
def index(request):
login = MyLoginForm()
signup = MySignUpForm()
if request.method == "POST":
login = MyLoginForm(request.POST or None)
signup = MySignUpForm(request.POST or None)
if login.is_valid():
lg_instance = login.save(commit=False)
print (lg_instance)
context = {
'login': login,
'signup': signup,
'login_url': '/profile/'
}
return render(
request,
'homepage.html',
context,
)
根据以上信息,我有以下问题:
在我点击提交后,网站在 / 处显示 KeyError。这可能是什么原因造成的?回溯显示 'LoginForm' class(在 allauth/accounts/forms.py 中)有一个名为 Login 的字段导致冲突。
我如何实际登录用户并转到个人资料视图。
问题在于 MyLoginForm
初始化。从那里删除所有与电子邮件相关的代码。在 settings.py 中使用 ACCOUNT_AUTHENTICATION_METHOD = 'email'
,然后使用 __init__
方法仅覆盖占位符。检查 here django all auth 是否已经支持电子邮件。