[Fixed]-How create a login and registration page for a website using django framework?

1👍

For simple log-in
in users/views.py

from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, logout,login
from django.http import HttpResponse, HttpResponseRedirect

def user_login(request):
    if request.method == "POST":
        phone = request.POST.get('phone')
        password = request.POST.get('password')
        user = authenticate(username=phone, password=password)
        if user:
            login(request,user)
            return HttpResponseRedirect('/users/home')
        else:
            error = " Sorry! Phone Number and Password didn't match, Please try again ! "
            return render(request, 'login/index.html',{'error':error})
    else:
        return render(request, 'login/index.html')

and in template login/index.html

<html>
<body>
{% if error %}
{{ error }}
{% endif %}
<form method="post" action="/users/login/">{% csrf_token %}
<input type=text placeholder="PhoneNo" name="phone">
<input type=password placeholder="Password" name="password">
<input type="submit" value="login">
</body>
</html>

for registration

login/signup.html

<html>
<body>
<form method=post action="users/signup/">{% csrf_token %}
<input type="text" name="phone" placeholde="Phone No">
<input type="text" name="email" placeholde="Email">
<input type="text" name="password1" placeholde="Password">
<input type="text" name="password2" placeholde="Password Again">
<input type="submit" value="signup">
</form> 
</body>
</html>

in users/views.py

def users_signup(request):
    if request.method == 'POST':
        email = request.POST.get('email')
        phone = request.POST.get('phone')
        pass_1 = request.POST.get('password1')
        pass_2 = request.POST.get('password2')
        if pass_1 == pass_2:
             user = User.objects.create_user(
                                              username=phone,
                                              email=email,
                                              password=pass_1,
                                             )
             return HttpResponseRedirect("/")
        else:
             error = " Password Mismatch "
             return render(request, 'login/signup.html',{"error":error})
    else:
         return render(request, 'login/signup.html')

main urls.py in main project folder where there is settings.py file would be

from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = [
         url(r'^admin/', admin.site.urls),
         url(r'^users/', include('users.urls')),
]

also url.py of app say “users”

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
       url(r'^login/', "users.views.user_login", name='login_url'),
       url(r'^signup/', "users.views.user_signup", name='signup_url'),
)
👤Bijoy

0👍

Assuming your UI is based on a form, all you need to do in view.py is to handle a POST request which is sent from client when this form is submitted. So you define a method (say signup) which would get passed a request and possibly other parameters if needed. In it you do necessary validation (i.e. check if this user already exists) and return either new page with error messages via render() or a redirect to the next page if all is good.

More details in official tutorial which is quite good as correctly pointed out by @anuragal

Leave a comment