I have been trying so hard to make an user registration and login using Django. I am using AbstractUser for this. Whenever, I enter the form fields, and click Signup the page is not getting redirected and the entered data aren't saved on the database
This is my view.py
def register(request):
if request.method == "POST":
print("method is post")
form = UserRegisterForm(request.POST or None)
if form.is_valid():
print("form is valid")
form.save()
username = form.cleaned_data.get("username")
messages.success(request, f"hey {username}, account created successfully")
new_user = authenticate(username=form.cleaned_data['email'],
password=form.cleaned_data['password1'])
login(request, new_user)
return redirect("jew_app:home")
else:
print(form.errors)
else:
print("user can't be registered")
form = UserRegisterForm()
context = {
'form': form
}
return render(request, 'user/register.html', context)
def user_login(request):
if request.user.is_authenticated:
messages.warning(request, f"Hey you are already logged in")
return redirect("accounts:profile")
if request.method == "POST":
email = request.POST.get("email")
password = request.POST.get("password")
try:
user = User.objects.get(email=email)
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
messages.success(request, "You are logged in")
return redirect("jew_app:home")
else:
messages.warning(request, "User Does Not Exist. Create an account")
except:
messages.warning(request, f"User with {email} does not exist")
context = {
}
return render(request, 'user/login.html', context)
models.py
class User(AbstractUser):
email = models.EmailField(unique=True, null=False)
username = models.CharField(max_length=100)
dob = models.DateField(null=True, blank=True)
mobile_number = models.CharField(max_length=10, null=True, blank=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = ['username']
def __str__(self):
return self.username
I tried Django built-in form etc. I was able to create the superuser and the superuser details are stored in database but the users after registering the superuser through form fields are not getting stored in database.
Don’t use
form.is_valid(),form.save(), or any custom register form likeUserRegisterForm.Instead, in your
register()view you must create an User entry withcreate_user(). Follow the documentation:Also you must manage any username conflict. If two users have the same email address, you must for example refuse the registration.