Django User Registration and Login System: Step-by-Step Guide

 

Step 1: Create a Django Project

django-admin startproject auth_demo

cd auth_demo

python manage.py startapp accounts


🧩 Step 2: Add App to settings.py

INSTALLED_APPS = [

    ...

    'accounts',

    'django.contrib.sessions',

    'django.contrib.auth',

    ...

]


Also, add login URL if you want:

LOGIN_URL = '/login/'

🧱 Step 3: Create URL Routes

Create a file accounts/urls.py

# accounts/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register_view, name='register'),
    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
    path('dashboard/', views.dashboard_view, name='dashboard'),
]


Now include this in the main urls.py:

# auth_demo/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('accounts.urls')),
]


✏️ Step 4: Create Views

# accounts/views.py

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required

# Register View
def register_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        User.objects.create_user(username=username, password=password)
        return redirect('login')
    return render(request, 'register.html')

# Login View
def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
            return redirect('dashboard')
        else:
            return render(request, 'login.html', {'error': 'Invalid credentials'})
    return render(request, 'login.html')

# Logout View
def logout_view(request):
    logout(request)
    return redirect('login')

# Dashboard View
@login_required
def dashboard_view(request):
    return render(request, 'dashboard.html')


🖼️ Step 5: Create Templates

Create a folder templates inside the accounts app:

accounts/

  └── templates/

        ├── register.html

        ├── login.html

        └── dashboard.html

register.html

<h2>Register</h2>
<form method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="Username"><br>
    <input type="password" name="password" placeholder="Password"><br>
    <button type="submit">Register</button>
</form>
<a href="/login/">Already have an account? Login</a>

login.html

<h2>Login</h2>
{% if error %}<p style="color:red">{{ error }}</p>{% endif %}
<form method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="Username"><br>
    <input type="password" name="password" placeholder="Password"><br>
    <button type="submit">Login</button>
</form>
<a href="/register/">Create an account</a>

dashboard.html

<h2>Welcome, {{ request.user.username }}</h2>
<a href="/logout/">Logout</a>


⚙️ Step 6: Run Migrations and Server

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

Now open:

  • http://localhost:8000/register/ → Create account

  • http://localhost:8000/login/ → Login

  • http://localhost:8000/dashboard/ → Protected vie


Comments

Popular posts from this blog

Mastering Django: Project and App Folder Structure

Mastering Django Template Language (DTL): A Step-by-Step Guide

How to Add Templates in Django: Step-by-Step Guide