简体   繁体   中英

django registration and login on the same page

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 views file

#views.py

def register(request):
form = CreateUserForm()
if request.method == 'POST':
    form = CreateUserForm(request.POST)
    if form.is_valid():
        user = form.save()
        username = form.cleaned_data.get('username')

        messages.success(request, ' Account was created for ' + username)

        return redirect('login')

context = {'form': form}
return render(request, 'register.html', context)

@unauthenticated_user

def loginPage(request):

if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    user = authenticate(request, username=username, password=password)

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

You can have:

views.py


...
def RegisterLoginPage(request):
    form_register = CreateUserForm(auto_id="register_%s")
    form_login = LoginForm(auto_id="login_%s")#You can ignore this if you dont use it'
    if request.method=="POST":
        form_login = LoginForm(request.POST, auto_id="login_%s")
        form_register = CreateUserForm(request.POST,auto_id="register_%s")
        if form_login.has_changed() and form_login.is_valid():
            ##Carry out appropriate function
        elif form_register.has_changed() and form_register.is_valid():
            ##Carry out appropriate function
        elif form_login.is_invalid():## the next two elif can be ignored
            ##
        elif form_register.is_invalid():
            ##
        

        
    context={
        "form_register":form_register
        "form_login": form_login#You can ignore this if you dont use it
        }
    return render(request, "registerlogin.html", context)

registerlogin.html

<form method="POST" action='{% url "registerloginurl" %}'>
{{form_register.as_p}}
{% csrf_token %}
<input type="submit">
</form>
<form method="POST" action='{% url "registerloginurl" %}'>
{{form_login.as_p}}<!-- or however you implement this-->
{% csrf_token %}
<input type="submit">
</form>

The auto_id attribute ensures that conflicting field names do not occur.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM