簡體   English   中英

用戶無法登錄django

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM