Как обновить код, чтобы логин и регистрация были на одной странице в django?
Я хочу иметь форму регистрации и входа на одной странице, я также хочу, чтобы регистрация и вход в систему зависели от того, какая кнопка была нажата. Вот моя страница регистрации введите описание изображения здесь введите описание изображения здесь
и вот мой views.py
def register_view(request):
if request.method == "POST":
form = UserRegisterForm(request.POST or None)
if form.is_valid():
new_user = form.save()
username = form.cleaned_data.get("username")
messages.success(request, f"Hey {username}, Your account was created successfuly")
new_user = authenticate(username=form.cleaned_data['email'],
password = form.cleaned_data['password1'])
login(request, new_user)
return redirect("core:index")
else:
print("User cannot be registered")
form = UserRegisterForm()
context = {
'form': form,
}
return render(request, "userauths/sign-up.html", context)
def login_view(request):
if request.user.is_authenticated:
return redirect("core:index")
if request.method == "POST":
email = request.POST.get("email")
password = request.POST.get("password")
try:
user = User.object.get(email=email)
except:
messages.warning(request, f"User with {email} does not exist")
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
messages.succes(request, "You are logged in")
return redirect("core:index")
else:
messages.warning(request, "User does not exist. Create an account!!")
context = {
}
return render(request, "userauths/sign-in.html", context)
register.html
<div class="login-form">
<form class="sign-in-htm" method="post" method="POST">
{% csrf_token%}
<div class="group">
<label for="user" class="label">Email</label>
<input id="user" type="text" class="input" required name="email">
</div>
<div class="group">
<label for="pass" class="label">Password</label>
<input id="pass" type="password" class="input" name="password" required data-type="password">
</div>
<div class="group">
<input id="check" type="checkbox" class="check" checked>
<label for="check"><span class="icon"></span> Keep me Signed in</label>
</div>
<div class="group">
<input type="submit" class="button" value="sign-in">
</div>
<div class="hr"></div>
<div class="foot-lnk">
<a href="#forgot">Forgot Password?</a>
</div>
</form>
<form class="sign-up-htm" method="post" method="POST">
{% csrf_token %}
<div class="group">
{{form.username}}
</div>
<div class="group">
{{form.password1}}
</div>
<div class="group">
{{form.password2}}
</div>
<div class="group">
{{form.email}}
</div>
<div class="group">
<input type="submit" class="button" value="sign-up">
</div>
<div class="hr"></div>
<div class="foot-lnk">
<label for="tab-1">Already Member?</a>
</div>
</form>
</div>
Я пробовал создать if-статью, но она просто ломает страницу. Я знаю, что это возможно, но те идеи, которые я пробовал, не сработали.
Если здесь ваша страница с двумя формами, использующая плохие
css-анимации и кнопки (можно было бы использовать другой элемент) для переключения display: block;
и display: none;
<div form-container>
<div toggle-login-buttons-or-links>
<button onclick="switchToLogin()">
login
</button>
or
<button onclick="switchToRegister()">
register
</button>
</div>
<div forms> <!-- default to login -->
<form login style="transition: 0.5s;">...</form>
<form register style="transition: 0.5s; display: none;">...</form>
</div>
<script>
function switchToLogin() {
let
login = document.querySelector("form[login]"),
register = document.querySelector("form[register]");
login.style.display = 'block':
register.style.display = 'none':
}
function switchToRegister() {
let
login = document.querySelector("form[login]"),
register = document.querySelector("form[register]");
login.style.display = 'none':
register.style.display = 'block':
}
</div>