[英]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.