1

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 class="formBx">
            <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 class="signup">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 class="user signUpBx">
        <div class="formBx">
            <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 class="signup">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.

1 Answer 1

2

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>
 
Sign up to request clarification or add additional context in comments.

1 Comment

I Changed my code to this if "register" in request.method == 'POST': form = CreateUserForm(request.POST) == "register" if "login" in request.method == "POST": this is not throwing error right now but also dont register or login.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.