I have created a (CustomUserForm) like the below:
from django.contrib.auth.forms import UserChangeForm from .models import User from django import forms
class CustomUserForm(UserChangeForm):
username = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control my-2', 'placeholder': 'Enter Username'}))
email = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control my-2', 'placeholder': 'Enter The Email'}))
password1 = forms.CharField(
widget=forms.PasswordInput(attrs={'class': 'form-control my-2', 'placeholder': 'Enter The Password'}))
password2 = forms.CharField(
widget=forms.PasswordInput(attrs={'class': 'form-control my-2', 'placeholder': 'Confirm Password'}))
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
and the corresponding view to create a new user:
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
def register(request):
if request.method == 'POST':
form = CustomUserForm(request.POST)
if form.is_valid():
username=form.cleaned_data['username']
email=form.cleaned_data['email']
password=make_password(form.cleaned_data['password1'])
data=User(username=username,email=email,password=password)
data.save()
messages.success(request, "Registered Successfully")
return redirect('/login/')
else: #Here GET condition
form = CustomUserForm()
context = {'form': form}
return render(request, 'auth/register.html', context)
and this is the register.html
{% extends 'layouts/main.html' %}
{% block title %} {{ category }} {% endblock %}
{% block content %}
<section style="background-color: #eee;">
<div >
<div >
<div >
<div style="border-radius: 25px;">
<div >
<div >
<div >
<p >Sign up</p>
<form action="" method="POST">
{% csrf_token %}
<div >
<i ></i>
<div >
<label for="form3Example1c">Your Name</label>
{{ form.username }}
{% if form.errors.username %}
<span >{{ form.errors.username }}</span>
{% endif %}
</div>
</div>
<div >
<i ></i>
<div >
<label for="form3Example3c">Your Email</label>
{{ form.email }}
{% if form.errors.email %}
<span >{{ form.errors.email }}</span>
{% endif %}
</div>
</div>
<div >
<i ></i>
<div >
<label for="form3Example4c">Password</label>
{{ form.password1 }}
{% if form.errors.password1 %}
<span >{{ form.errors.password1 }}</span>
{% endif %}
</div>
</div>
<div >
<i ></i>
<div >
<label for="form3Example4cd">Repeat your password</label>
{{ form.password2 }}
{% if form.errors.password2 %}
<span >{{ form.errors.password2 }}</span>
{% endif %}
</div>
</div>
<div >
<input type="checkbox" value="" id="form2Example3c" />
<label for="form2Example3">
I agree all statements in <a href="#!">Terms of service</a>
</label>
</div>
<div >
<button type="submit" >Register</button>
</div>
</form>
</div>
<div >
<img src="https://mdbcdn.b-cdn.net/img/Photos/new-templates/bootstrap-registration/draw1.webp"
alt="Sample image">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
everything is working correctly, except the password confirmation, I can write a different password for password 1 and 2 and user still created ..... thanks
CodePudding user response:
You can compare them at register request if the both passwords are equal.
def register(request):
if request.method == 'POST':
form = CustomUserForm(request.POST)
if form.is_valid():
username=form.cleaned_data['username']
email=form.cleaned_data['email']
if form.cleaned_data['password1'] == form.cleaned_data['password2']: # new line
password=make_password(form.cleaned_data['password1'])
data=User(username=username,email=email,password=password)
data.save()
messages.success(request, "Registered Successfully")
return redirect('/login/')
else: #Here GET condition
form = CustomUserForm()
context = {'form': form}
return render(request, 'auth/register.html', context)