我正在尝试创建一个我有用户的应用程序,该类是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)
如果我删除&#34; unique = True&#34;从电子邮件领域,它工作正常,但当我设置&#34; unique = True&#34;比它告诉表格无效,在&#34; guest_login&#34;方法。 所以如果有人能帮助我,我会很感激。
好的,我发现没有任何事情发生,因为电子邮件已经存在,但我不是要将该电子邮件写入数据库,只是为了使用它登录,将其用作用户名,我该怎么办?
答案 0 :(得分:0)
可能是这样的。将您的代码更改为:
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)
祝你好运。