django - django:“LoginForm”对象没有属性“cleaned_data”
问题描述
我正在尝试登录,但它不起作用。错误是 form.is_valid() return False 和
“LoginForm”对象没有属性“cleaned_data”
我想不通是问题所在。
用户/forms.py
class LoginForm(forms.Form):
email = forms.EmailField(widget=forms.EmailInput(
attrs={'style': 'width:100%; height:100%;'}))
password = forms.CharField(widget=forms.PasswordInput(
attrs={'style': 'width:100%; height:100%;'}))
def __init__(self, request=None, *args, **kwargs):
self.request = request
super(LoginForm, self).__init__(*args, **kwargs)
self.fields['email'].label = "이메일"
self.fields['password'].label = "비밀번호"
def clean(self):
super().clean()
email = self.cleaned_data.get("email")
password = self.cleaned_data.get("password")
try:
user = models.User.objects.get(email=email)
if user.check_password(password):
return self.cleaned_data
else:
self.add_error("password", forms.ValidationError(
"비밀번호가 틀렸습니다."))
except models.User.DoesNotExist:
self.add_error("email", forms.ValidationError(
"존재하지 않는 계정입니다."))
用户/views.py
class LoginView(mixins.LoggedOutOnlyView, View):
def get(self, request):
form = forms.LoginForm(request.POST)
return render(request, "users/login.html", {"form": form})
def post(self, request):
form = forms.LoginForm(request.POST or None)
print(form.is_valid())
if form.is_valid():
email = form.cleaned_data.get("email")
password = form.cleaned_data.get("password")
get_user_name = user_models.User.objects.get(email=email)
user = authenticate(
request, username=get_user_name, password=password)
if user is not None:
login(request, user)
return redirect(reverse("cores:home"))
else:
return render(request, "users/login.html", {"form": form})
解决方案
super()
您需要使用调用的返回值设置一个局部变量。在您的字段中,您不再调用self.cleaned_data
变量,而是调用局部变量cleaned_data
。cleaned_data
在方法结束时也返回def clean()
- 即使发生错误。
def clean(self):
cleaned_data = super().clean()
email = cleaned_data.get("email")
password = cleaned_data.get("password")
...
# Don't forget to return the cleaned_data after everything
return cleaned_data
这记录在 django 文档中:
推荐阅读
- android - 条码和二维码扫描不适用于 CameraX / ZXing
- typescript - 打字稿:发出编译时警告以避免提交临时更改
- node.js - Yarn 安装中的文件意外结束
- visual-studio-code - Visual Studio Code - 自定义特定 html 标签的颜色
- azure - azure DevOps - 与 Azure 的服务连接
- c - 不能在旧版 Intel CPU 上使用 _m_prefetchw 内在函数和 gcc/clang -march=native?
- jwt - 使用赛普拉斯将不记名令牌从 API 请求转移到其他测试
- kubernetes - 我可以为 Kubernetes 服务使用多个名称吗?
- c# - “覆盖”抽象方法的 C# 语言目的
- powershell - 如何使用 PowerShell 将文件夹中的文件映射为模式?