Регистрация пользователя и вход в 1 просмотр - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать страницу с логином и регистрацией в одном шаблоне в django, форма входа работает правильно, но форма регистрации не отправляется, форма регистрации не проверяется в представлениях, которые я пробовал с помощью django впостроить UsercreationForm, но это не работает либо

views.py

def login_register(request):
    if request.method == "POST":
        form_log = UserLoginForm(data=request.POST or None)
        form_reg = UserRegistrationForm(data=request.POST or None)
        if 'sign_up' in request.POST:
            if form_reg.is_valid():
                user = form_reg.save(commit=False)
                password = form_reg.cleaned_data.get('password1')
                user.set_password(password)
                user.save()
                login(request, user)

                return redirect('network:homepage')
        elif 'sign_in' in request.POST:
            if form_log.is_valid():
                username = form_log.cleaned_data.get('username')
                password = form_log.cleaned_data.get('password')
                user = authenticate(request, username=username, password=password)
                login(request, user)
                if user is not None:
                    login(request, user)
                    return HttpResponseRedirect(reverse('network:homepage'))

    else:
        form_reg = UserRegistrationForm()
        form_log = UserLoginForm()
    return render(request,"network/bothpage.html", {'form_reg': form_reg, 'form_log': form_log})

forms.py

lass UserLoginForm(forms.Form):
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}), label='Username')
    password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}), label="Password")

    class Meta:
        model = User
        fields = ['username', 'password']

    def clean(self, *args, **kwargs):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')

        if username and password:
            user = authenticate(username=username, password=password)
            if not user:
                raise forms.ValidationError('This user does not exist')
            if not user.check_password(password):
                raise forms.ValidationError('Incorrect Password')
            if not user.is_active:
                raise forms.ValidationError('User is Not active')
        return super(UserLoginForm, self).clean(*args, **kwargs)


class UserRegistrationForm(forms.ModelForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}), label='Username')
    email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Email'}))
    password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}), label="Password")
    password2 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password Conformation'}), label="Password Conformation")

    class Meta:
        model = User
        fields = [
            'username',
            'email',
            'password1',
            'password2',
        ]

    def clean_username(self):
        username = self.cleaned_data.get('username')
        username_qs = User.objects.filter(username=username)
        if username_qs.exists():
            raise forms.ValidationError(
                "This Username already exists"
            )

    def clean_password(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if password1 != password2:
            raise forms.ValidationError("passwords must match")

template.html

<form method="POST">
        {% csrf_token %}
            .....
            ....
            <span>or use your account</span>
            {{ form_log.errors }}
            {{ form_log.non_field_errors }}
            {{ form_log.username.error}}
            {{ form_log.username }}
            {{ form_log.password.error}}
            {{form_log.password}}

            <button type = "submit" value = 'sign_in' name= "sign_in">Sign In</button></form>
<form method="POST">
        {% csrf_token %}
            <h1>Create Account</h1>
            {{ form_reg.errors }}
            {{ form_reg.non_field_errors }}
            {{ form_reg.username.error }}
            {{ form_reg.username }}
            {{ form_reg.email.error }}
            {{ form_reg.email }}
            {{ form_reg.password1.error}}
            {{form_reg.password1}}
            {{ form_reg.password2.error}}
            {{form_reg.password2}}
            <button type = "submit" value = 'sign_up' name= "sign_up">Sign Up</button>
        </form>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...