繁体   English   中英

如何解决Django中的属性错误?

[英]How to solve a attribute error in Django?

我正在尝试登录用户,但出现属性错误。

这是我的forms.py

class Login(forms.Form):
    email = forms.EmailField(max_length=250)
    password = forms.CharField(widget=forms.PasswordInput)

    def login_user(self):
        email = self.cleaned_data['email']
        password = self.cleaned_data.get('password')
        user = authenticate(email=email, password=password)
        if user in User.objects.all():
            login(self, user)
        else:
            return render(self, 'todoapp/waiting_2.html')

这是我的views.py

def login_user(request):
    if request.method == 'POST':
        login_form = Login(request.POST)
        if login_form.is_valid():
            login_form.login_user()
            login_form.save()
            return HttpResponseRedirect(reverse('dashboard'))
        else:
            return render(request, 'todoapp/waiting_2.html')
    return render(request, 'registration/login.html', {'form': Login()})

当我填写字段并尝试登录时,出现错误:

AttributeError at /login/

'Login' object has no attribute 'session'

追溯:

File "/home/gblp250/PycharmProjects/practice/venv/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/gblp250/PycharmProjects/practice/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/gblp250/PycharmProjects/practice/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/gblp250/PycharmProjects/assignment/todoapp/views.py" in login_user
  48.             login_form.login_user(request)

File "/home/gblp250/PycharmProjects/assignment/todoapp/forms.py" in login_user
  27.             login(self, request, user)

File "/home/gblp250/PycharmProjects/practice/venv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login
  126.     if SESSION_KEY in request.session:

Exception Type: AttributeError at /login/
Exception Value: 'Login' object has no attribute 'session'

这里有一些错误。 尝试以login_user方法形式呈现的主要方法之一。 除了其他方面,您尝试将self作为请求参数进行渲染,这毫无意义。

删除所有的if / else。 您不需要渲染; 但也请注意,您的if条件不必要地效率低下。 如果您获得用户,则它一定是用户。

最后,是导致错误的实际原因,您再次尝试在该位置将self传递给请求,但这次将其作为参数login 该代码属于视图。

最后,该表单不是ModelForm,因此没有保存方法。

因此,形式:

def login_user(self):
    email = self.cleaned_data['email']
    password = self.cleaned_data.get('password')
    return authenticate(email=email, password=password)

并查看:

    if login_form.is_valid():
        user = login_form.login_user()
        if user:
            login(request, user)
        return HttpResponseRedirect(reverse('dashboard'))

尽管此时您最好将所有逻辑移至视图。

login()将请求作为第一个参数,您以表单作为第一个参数来调用它。 https://docs.djangoproject.com/en/2.1/topics/auth/default/#django.contrib.auth.login

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM