用户无法登录django

时间:2016-04-17 12:12:11

标签: python django forms login

我正在尝试创建一个我有用户的应用程序,该类是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;方法。 所以如果有人能帮助我,我会很感激。

好的,我发现没有任何事情发生,因为电子邮件已经存在,但我不是要将该电子邮件写入数据库,只是为了使用它登录,将其用作用户名,我该怎么办?

1 个答案:

答案 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)
祝你好运。