initally I seperate the registration and loginUser function on my views.py, which work just fine creating the user. user created on DB and logout also works fine. but I had problems with the login that it won't log the user in withou giving any error alert. I figured that me putting the login and signup form in the same html file might be the problem so I tried to merge the register and loginUser function
def registerUser(request):
form = CreateUserForm()
if request.method=="POST":
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
user = form.cleaned_data.get('username')
messages.success(request, 'Account was created for ' + form.cleaned_data.get('username'))
email = form.cleaned_data.get('email')
Customer.objects.create(username=User.objects.get(username=user), email=email)
return redirect('register')
context={'form':form}
return render(request, 'store/register.html',context)
def loginUser(request):
if request.method =="POST":
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
return redirect('store')
else:
messages.info(request, 'Incorrect username or password')
context={}
return render(request, 'store/login.html',context)
here are the merged function
views.py
from django.shortcuts import render, redirect
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_protect
import json
import datetime
from .models import *
from . utils import cookieCart, cartData, guestOrder
# for userCreation
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from .forms import CreateUserForm, LoginForm
from django.contrib import messages
# authenticate user
from django.contrib.auth import authenticate, login, logout
# Create your views here
@csrf_protect
def register_or_login(request):
register_form = CreateUserForm()
login_form = LoginForm() # You might want to create a specific form for login
if request.method == "POST":
if "register" in request.POST:
register_form = CreateUserForm(request.POST)
if register_form.is_valid():
register_form.save()
user = register_form.cleaned_data.get('username')
email = register_form.cleaned_data.get('email')
# Additional actions for registration if needed
messages.success(request, 'Account was created for ' + user)
return redirect('store') # Redirect to store after successful registration
elif "login" in request.POST:
login_form = LoginForm(request.POST)
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
return redirect('store') # Redirect to store after successful login
else:
messages.info(request, 'Incorrect username or password')
context = {'register_form': register_form, 'login_form': login_form}
return render(request, 'store/register_login.html', context)
register_login.html
<!DOCTYPE html>
{% load static %}
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Sign Up | Log In</title>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;300;600&family=Seaweed+Script&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{% static "css/login.css" %}">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div class="wrapper">
<div class="title-text">
<div class="title login">Welcome to Viola</div>
<div class="title signup">Register Account</div>
</div>
<div class="form-container">
<div class="slide-controls">
<input type="radio" name="slide" id="login" checked>
<input type="radio" name="slide" id="signup">
<label for="login" class="slide login">Login</label>
<label for="signup" class="slide signup">Signup</label>
<div class="slider-tab"></div>
</div>
<div class="form-inner">
<form action="#" method="POST" class="login" id="login-form">
{% csrf_token %}
<div class="field">
{% comment %} <input type="text" placeholder="Username" required> {% endcomment %}
{{ login_form.username }}
</div>
<div class="field">
{% comment %} <input type="password" placeholder="Password" required> {% endcomment %}
{{ login_form.password }}
</div>
<div class="field btn">
<div class="btn-layer"></div>
<input type="submit" value="Log In" name="login">
</div>
<div class="signup-link">Not a member? <a href="">Signup now</a></div>
</form>
<form action="#" method="POST" class="signup" id="signup-form">
{% csrf_token %}
<div class="field">
{{ register_form.username }}
</div>
<div class="field">
{{ register_form.email }}
{% comment %} <input type="email" placeholder="Email Address" required> {% endcomment %}
</div>
<div class="field">
{{ register_form.password1 }}
{% comment %} <input type="password" placeholder="Password" required> {% endcomment %}
</div>
<div class="field">
{{ register_form.password2 }}
{% comment %} <input type="password" placeholder="Confirm password" required> {% endcomment %}
</div>
<div class="field btn">
<div class="btn-layer"></div>
<input type="submit" value="Sign Up" name="register">
</div>
</form>
</div>
</div>
</div>
<script>
// Get form fields
let loginFormFields = document.getElementById("login-form").getElementsByTagName("input");
let signupFormFields = document.getElementById("signup-form").getElementsByTagName("input");
// Set placeholders
loginFormFields[1].placeholder = "Username";
loginFormFields[2].placeholder = "Password";
signupFormFields[1].placeholder = "Username";
signupFormFields[2].placeholder = "Email Address";
signupFormFields[3].placeholder = "Password";
signupFormFields[4].placeholder = "Confirm Password";
</script>
<script>
// Your existing JavaScript code
const loginText = document.querySelector(".title-text .login");
const loginForm = document.querySelector("form.login");
const loginBtn = document.querySelector("label.login");
const signupBtn = document.querySelector("label.signup");
const signupLink = document.querySelector("form .signup-link a");
signupBtn.onclick = (()=>{
loginForm.style.marginLeft = "-50%";
loginText.style.marginLeft = "-50%";
});
loginBtn.onclick = (()=>{
loginForm.style.marginLeft = "0%";
loginText.style.marginLeft = "0%";
});
signupLink.onclick = (()=>{
signupBtn.click();
return false;
});
</script>
</body>
</html>
I tried changing the submit name and redirecting page, but still not working