Форма Django не подтверждается, как это исправить?
Я новичок в Django и я создавал магазин электронной коммерции с помощью Django. Я успешно создал форму входа пользователя, которая отлично работает, но я застрял на форме регистрации пользователя. Она не подтверждается.
Мой forms.py:
from django import forms
from django.forms.widgets import PasswordInput
class UserLoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
class UserRegistrationForm(forms.Form):
username = forms.CharField()
email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput)
password2 = forms.CharField(label='Confirm password', widget=forms.PasswordInput)
def clean(self):
cleaned_data = super().clean()
data = self.cleaned_data
password = cleaned_data.get('password')
password2 = cleaned_data.get('password2')
if password2 != password:
raise forms.ValidationError("Passwords must match")
return data
Мой регистр.html
<div>
<form method="POST" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="Register">
</form>
</div>
My login.html
<div>
<form method="POST" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="Login">
</form>
</div>
Мой views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from .forms import UserLoginForm, UserRegistrationForm
# Create your views here.
def userRegistrationPage(request):
form = UserRegistrationForm()
context = {
'form': form
}
if request.method == 'POST':
form = UserRegistrationForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
print(username, password)
else:
print("Form is not valid")
return render(request, 'index/register.html', context)
def userLoginPage(request):
form = UserLoginForm()
context = {
'form': form
}
if request.method == 'POST':
form = UserLoginForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(request, username=username, password=password)
print(user)
if user is not None:
login(request, user)
# Redirect to a success page.
return redirect("/")
else:
print("Error")
return render(request, 'index/login.html', context)
My urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index-page"), # Home Page
path('register', views.userRegistrationPage, name='register'), #User Registeration Page
path('login', views.userLoginPage, name='login'), #User Login Page
]
Каждый раз, когда я посещаю localhost:8000/register
, я получаю сообщение Form is not valid
от условия if/else при валидации формы в views.py
. Я проделал аналогичный процесс с UserLoginForm
и все работает отлично.
Я пытался обойти проблему и заглянул в документацию Django, но я не понимаю, что не так. Может ли кто-нибудь помочь мне, почему форма не подтверждается? Что я делаю неправильно? Буду признателен.
Не нужно возвращать данные после валидации формы методом clean
class UserRegistrationForm(forms.Form):
username = forms.CharField()
email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput)
password2 = forms.CharField(label='Confirm password',widget=forms.PasswordInput)
def clean(self):
cleaned_data = super().clean()
data = self.cleaned_data
password = cleaned_data.get('password')
password2 = cleaned_data.get('password2')
if password2 != password:
raise forms.ValidationError("Passwords must match")