Home > front end >  How can i Register and Login In The Same Page in Django?
How can i Register and Login In The Same Page in Django?

Time:04-04

i would like to have both my login form and my registration form on the same page within the same template, so i would like to have them under one view function but i am not too sure on how i can do that, here is my code.

Views.py

def register(request):
form = CreateUserForm()
if request.method == 'POST':
    form = CreateUserForm(request.POST) == "Register"
    if form.is_valid():
        form.save()
        user = form.cleaned_data.get('username')
        messages.success(request,"Account was Created for "   user)
    
context = {'form':form}
return render(request,'login.html',context)
def login(request):
if request.method == "POST":
    if request.POST.get('submit') == 'Login':
        username = request.POST.get('username')
        password = request.POST.get('password1')

        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request,user)
            return redirect('shop.html')
        else:
            messages.info(request, 'Wrong Username or password')
context = {}
return render(request,'shop.html',context)

login.html

 <div >
            <form method="POST",name="Login",value="Login">
            {% csrf_token %}
            <h2>Sign In</h2>
            {{form.username}}
            {{form.password1}}
            <input type="submit" name="submit" value="Login">
            <p >Don't have an Account?<a href="#" onclick="toggleForm();">Sign Up.</a></p>
            {% for message in messages %}
            <p id="messages">{{message}}</p>
            {% endfor %}
            </form>
        </div>
     </div>
     <div >
        <div >
            <form method="POST" value="Register">
            {% csrf_token %}
            <h2>Create an account</h2>
            {{form.username}}
            {{form.email}}
            {{form.password1}}
            {{form.password2}}
            <input type="submit" name="submit" value="Register">
            <p >Already Have an Account?<a href="#" onclick="toggleForm();">Sign In.</a></p>
            {% for message in messages %}
            <p id="messages">{{message}}</p>
            {% endfor %}
            </form>
        </div>

I'm getting AttributeError at /login/ 'bool' object has no attribute 'is_valid' error right now.

CodePudding user response:

You can use two separate forms for login and register in same view. Here is an example:

def register_login(request):
   if "register" in request.method == "POST": #add the name "register" in your html button
    ..... your registration code

   if "login" in request.method == "POST": #add the name "login" in your html button
    ..... your login code 


**html**
<form>
{%csrf_token%}
.... your registration form
<button type="submit" name="register">register</button>
</form>

<form>
{%csrf_token%}
.... your login form
<button type="submit" name="login">register</button>
</form>
 
  • Related