私はユーザーがいて、クラスはゲストで、登録でき、ログインしてプロフィールを更新することができます。今はログインができないので問題があります。私は電子メールがユニークであると設定していると思います。なぜなら、ユーザーのユーザー名だからです。ここでユーザーはdjangoにログインできません
は私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"を削除すると正常に動作しますが、 "unique = True"を設定するとフォームが有効ではないことがわかりますe「guest_login」メソッド。 誰かが私を助けることができたら、私はそれを感謝します。
メールが既に存在するので何も起こりませんが、私はそのメールをデータベースに書き込もうとしていないので、ログインしてユーザー名として使用してください。
コンソールからトレースバックやメッセージを受け取りますか?その場合は、ここに追加してください。 –
いいえ、何もエラーは発生しません。問題は、フォームが有効かどうかをチェックするときに、常にguest_loginのメソッドでFalseです。 その行:もしform.is_valid()がFalseならば、彼はそのif文の本文には絶対に入りません。そして、なぜ私はわかりません – P3P5