[英]User can not login in django
我正在嘗試制作一個我有用戶的應用程序,班級是Guest,可以注冊,登錄和更新他的個人資料。 現在我遇到了一個問題,因為他無法登錄,我認為這是因為我設置了電子郵件的唯一性,應該是因為該用戶名是用戶名。
這是我的model.py文件:
class Guest(models.Model):
name = models.CharField(blank = False, max_length = 100)
surname = models.CharField(blank = False, max_length = 100)
email = models.EmailField(blank = False, max_length = 200, unique = True)
guest_password = models.CharField(blank = False, max_length = 50)
repeat_guest_password = models.CharField(blank = False, max_length = 50)
slug = models.SlugField(unique = True)
profile_picture = models.ImageField(upload_to = upload_location,
null = True,
blank = True,
width_field="width_field",
height_field="height_field"
)
width_field = models.IntegerField(default = 0, null = True)
height_field = models.IntegerField(default=0, null = True)
islogged = models.BooleanField(default = False)
def get_absolute_url(self):
return reverse("gosti:restorani", kwargs={"slug": self.slug})
這是我的forms.py文件:
class GuestForm(forms.ModelForm):
"""
Registration form
"""
class Meta:
model = Guest
fields = [
'name',
'surname',
'email',
'guest_password',
'repeat_guest_password',
]
#pomocu ovog dole moguce je primenjivati razlicite nacine za styling nasih polja odradjenih preko djanga
def __init__(self, *args, **kwargs):
super(GuestForm, self).__init__(*args, **kwargs)
self.fields['name'].widget = forms.TextInput(attrs={
'placeholder': 'Name*',
'required': True,
'class': "form-first-name form-control"
})
self.fields['surname'].widget = forms.TextInput(attrs={
'placeholder': 'Surname*',
'required': True,
'class': "form-last-name form-control"
})
self.fields['email'].widget = forms.EmailInput(attrs={
'placeholder': 'Email*',
'required': True,
'class': "form-email form-control"
})
self.fields['guest_password'].widget = forms.PasswordInput(attrs={
'placeholder': 'Enter password*',
'required': True,
'class': "form-first-name form-control"
})
self.fields['repeat_guest_password'].widget = forms.PasswordInput(attrs={
'placeholder': 'Confirm password*',
'required': True,
'class': "form-first-name form-control"
})
class AuthenticationForm(forms.ModelForm):
"""
Login form
"""
class Meta:
model = Guest
fields = ['email', 'guest_password']
def __init__(self, *args, **kwargs):
super(AuthenticationForm, self).__init__(*args, **kwargs)
self.fields['email'].unique = False
self.fields['email'].widget = forms.EmailInput(attrs={
'placeholder': 'Email*',
'required': True,
'class': "form-email form-control"
})
self.fields['guest_password'].widget = forms.PasswordInput(attrs={
'placeholder': 'Password*',
'required': True,
'class': "form-first-name form-control"
})
class UpdateGuestProfileForm(forms.ModelForm):
"""
registration form
"""
class Meta:
model = Guest
fields = ['email', 'name', 'surname', 'profile_picture']
def __init__(self, *args, **kwargs):
super(UpdateGuestProfileForm, self).__init__(*args, **kwargs)
self.fields['email'].widget = forms.EmailInput(attrs={
'placeholder': 'Email*',
'required': True,
'class': "form-control"
})
self.fields['name'].widget = forms.TextInput(attrs={
'placeholder': 'Name*',
'required': True,
'class': "form-control"
})
self.fields['surname'].widget = forms.TextInput(attrs={
'placeholder': 'Surname*',
'required': True,
'class': "form-control"
})
這是我的views.py文件:
def guest_registration(request):
form = GuestForm(request.POST or None, request.FILES or None)
if form.is_valid():
password1 = request.POST['guest_password']
password2 = request.POST['repeat_guest_password']
if Guest.objects.filter(email = request.POST['email']).exists():
messages.error(request, 'error', extra_tags='email_exists')
elif len(request.POST['guest_password']) < 6 or len(request.POST['guest_password']) > 50:
messages.error(request, 'error', extra_tags='password_length_error')
elif request.POST['guest_password'] != request.POST['repeat_guest_password']:
messages.error(request, 'erorr', extra_tags='passwords_dont_match_error')
else:
instance = form.save(commit = False)
instance.save()
form = GuestForm()
messages.success(request, 'success')
return redirect('/guest/login/')
context = {
"form": form,
}
return render(request, 'registrationpage.html', context)
def guest_login(request):
"""
Login verification
"""
form = AuthenticationForm(request.POST or None)
if form.is_valid():
#instance = form.save(commit = False)
if Guest.objects.filter(email = request.POST['email'], guest_password = request.POST['guest_password']).exists():
guest = Guest.objects.get(email = request.POST['email'], guest_password = request.POST['guest_password'])
Guest.objects.select_for_update().filter(email = request.POST['email'], guest_password = request.POST['guest_password']).update(islogged = True)
return HttpResponseRedirect(guest.get_absolute_url())
else:
messages.error(request, 'error', extra_tags = 'login_error')
form = AuthenticationForm()
context = {
"form": form,
}
return render(request, 'loginpage.html', context)
如果我從電子郵件字段中刪除“ unique = True”,則可以正常工作,但是當我在“ guest_login”方法中設置“ unique = True”時,它表明該表單無效。 因此,如果有人可以幫助我,我將不勝感激。
好的,我發現什么都沒有發生,因為該電子郵件已經存在,但是我不是試圖將該電子郵件寫入數據庫,而只是使用它登錄並將其用作用戶名,我該怎么做?
可能是這樣。 將您的代碼更改為此:
def guest_login(request):
"""
Login verification
"""
if request.method == "POST":
form = AuthenticationForm(request.POST or None)
if form.is_valid():
...
else:
messages.error(request, 'error', extra_tags = 'login_error')
else:
form = AuthenticationForm()
context = {
"form": form,
}
return render(request, 'loginpage.html', context)
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.