python - 'LoginForm' 对象没有属性 'get_user'
问题描述
我尝试使用基于登录类的视图登录,但是当我这样做时,它向我显示了这个错误:
AttributeError:“LoginForm”对象没有属性“get_user”
这是我在 forms.py 中的登录表单代码:
from django import forms
class LoginForm(forms.Form):
"""
The login form
"""
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(LoginForm, self).__init__(*args, **kwargs)
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
这是我在views.py中基于登录类的视图代码:
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
from users.forms import LoginForm
class Login(LoginView):
form_class = LoginForm
template_name = 'users/login.html'
success_url = reverse_lazy('phones:show')
我现在能做什么?
解决方案
LoginView
假设您正在使用作为django.contrib.auth.forms.AuthenticationForm
具有get_user
方法的表单来工作。查看您的实现,您不需要您的LoginForm
类,因为AuthenticationForm
您的表单已经完成了您的工作,因此您的视图可以简单地是:
from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy
class Login(LoginView):
# Below line is not needed, let the parent class handle that
# form_class = LoginForm
template_name = 'users/login.html'
success_url = reverse_lazy('phones:show')
事实上,如果我们真的仔细考虑这一点,你甚至不需要重写LoginView
,只需将调用中需要的参数传递给as_view
:
path('login/', LoginView.as_view(template_name = 'users/login.html', success_url = reverse_lazy('phones:show')), name="login")
推荐阅读
- c++ - 计算1DPlot,确定最大值和它们之间的距离
- c++ - 使 gcc 跳过特定 .cpp 文件的“-Werror=unused-parameter”
- javascript - 防止用户在表单提交后返回 - PHP
- hololens - 如何在 Hololens 2 上强制卸载应用程序
- vue.js - vue 的 src 文件夹中缺少 store 文件夹
- excel - 有没有办法让可见的 excel 图表成为活动图表?
- android - 在模块 kotlin-android-extensions-runtime 和 kotlin-parcelize-runtime 中发现重复的类 kotlinx.android.parcel.IgnoredOnParcel
- android - 我怎样才能在另一个片段中拥有一个片段?
- netlogo - 如何检查任意两只海龟之间的碰撞?
- windows - 如何识别 KeyPress 事件中的虚拟键码?