首页 > 解决方案 > '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')

我现在能做什么?

标签: pythondjango

解决方案


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")

推荐阅读