Django注册表单'AnonymousUser'对象没有属性'后端' [英] Django Register Form 'AnonymousUser' object has no attribute 'backend'
问题描述
我有以下注册视图进入新的用户。
我希望它进入新用户,然后自动登录。
它通过用户记录保存,但在尝试登录时返回此错误:
'AnonymousUser'对象没有属性'后端'
视图。 py
def register(request):
/ pre>
if request.method =='POST':
form = UserRegisterForm(request.POST,error_class = DivErrorList)
如果form.is_valid():
form.save()
new_user = authenticate(username = request.POST ['username'], password = request.POST ['password']
login(request,new_user)
return HttpResponseRedirect('/ production /')
else:
form = UserRegisterForm(error_class = DivErrorList)
return render(request,'register.html',{
'form':form,
})
forms.py
class UserRegisterForm(forms.ModelForm )
class Meta:
model = User
fields =('用户名','first_name','last_name','email','密码')
password_compare = forms.CharField(max_length = 128)
def __init __(self, * args,** kwargs):
super(UserRegisterForm,self).__ init __(* args,** kwargs)
self.fields ['password_compare']。label ='Password Again'
self.fields ['password']。help_text =''
self.fields ['first_name']。label ='First Name'
self.fields ['last_name']。label ='Last名称'
self.fields ['email']。label ='电子邮件地址'
def clean(self):
cleaning_data = self.cleaned_data
password1 = cleaning_data.get('password',None)
password2 = clean_data.get('password_compare',无)
如果没有(密码1):
error_msg = u'这个字段是必需的'
self._errors ['password'] = self.error_class([error_msg])
if没有(password2):
error_msg = u'这个字段是必需的'
self._errors ['password_compare'] = self.error_class([error_msg])
#密码字段必须匹配
如果password1!= password2:
error_msg = u'Password不匹配确认'
self._errors ['password'] = self.error_class([error_msg])
del cleaning_data ['password']
#不能有一个用户名已经存在
try:
existing_user = User.objects.get(username = clean_data.get('username'))
error_msg = u'Username已经存在'
self._errors ['username'] = self.error_class([error_msg])
del cleaning_data ['username']
return clean_data
除了User.DoesNotExist:
返回clean_data
解决方案你的你ser将永远不会进行身份验证,因为您以纯文本形式保存密码 -
authenticate
预期使用散列密码。在将新的用户对象保存到db之前,您应该调用user.set_password(password)
- 请参阅内置UserCreationForm
。 / p>I have the following register view that enters a new user. I want it to enter the new user and then log in automatically. It saves through the User record but returns this error when trying to login: 'AnonymousUser' object has no attribute 'backend'
views.py
def register(request): if request.method == 'POST': form = UserRegisterForm(request.POST, error_class=DivErrorList) if form.is_valid(): form.save() new_user = authenticate(username=request.POST['username'],password=request.POST['password']) login(request, new_user) return HttpResponseRedirect('/production/') else: form = UserRegisterForm(error_class=DivErrorList) return render(request,'register.html', { 'form': form, })
forms.py
class UserRegisterForm(forms.ModelForm): class Meta: model = User fields = ('username','first_name','last_name','email','password') password_compare = forms.CharField(max_length=128) def __init__(self, *args, **kwargs): super(UserRegisterForm, self).__init__(*args, **kwargs) self.fields['password_compare'].label = 'Password Again' self.fields['password'].help_text = '' self.fields['first_name'].label = 'First Name' self.fields['last_name'].label = 'Last Name' self.fields['email'].label = 'E-mail Address' def clean(self): cleaned_data = self.cleaned_data password1 = cleaned_data.get('password', None) password2 = cleaned_data.get('password_compare', None) if not (password1): error_msg = u'This field is required.' self._errors['password'] = self.error_class([error_msg]) if not (password2): error_msg = u'This field is required.' self._errors['password_compare'] = self.error_class([error_msg]) # password fields must match if password1 != password2: error_msg = u'Password doesn\'t match the confirmation.' self._errors['password'] = self.error_class([error_msg]) del cleaned_data['password'] # cannot have a username already existing try: existing_user = User.objects.get(username=cleaned_data.get('username')) error_msg = u'Username already exists.' self._errors['username'] = self.error_class([error_msg]) del cleaned_data['username'] return cleaned_data except User.DoesNotExist: return cleaned_data
解决方案Your user will never authenticate, because you're saving the password in plain text - and
authenticate
expects a hashed password. You should calluser.set_password(password)
on the newly-created user object before saving it to the db - see the built-inUserCreationForm
.这篇关于Django注册表单'AnonymousUser'对象没有属性'后端'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文