In a Django web application, the implementation of user authentication, including features like login, register, and logout, is a common requirement. Django offers built-in features and modules that make handling user authentication straightforward. Here's a basic guide on implementing login, register, and logout functionality in a Django application:
1. Setting up Django Project
Assuming you have already created a Django project, ensure that you have the necessary apps installed:
pip install django
2. Creating a Django App
Create a new Django app for handling authentication:
django-admin startproject chirags_project
cd chirags_project
python manage.py startapp accounts
And now open your project in text editor like vscode, sublime etc.
3. Configuring Django Settings
Add the newly created app and required authentication settings in your project's settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'LoginRegisterLogout',
'USER': 'postgres',
'PASSWORD': 'admin@123',
'HOST': 'localhost',
}
}
# settings.py
INSTALLED_APPS = [
...
'accounts',
]
# Authentication settings add in the last
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
4. Implementing User register
In your accounts/views.py:
# accounts/views.py
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('home') # Redirect to your home page
else:
form = UserCreationForm()
return render(request, 'users/register.html', {'form': form})
5. Creating Template base.html
Create a base template (accounts/templates/users/base.html) in your accounts app:
<!-- accounts/templates/users/base.html -->
{% block content %}
{% endblock content %}
6. Creating register Template
Create a register template (accounts/templates/users/register.html) in your accounts app:
<!-- accounts/templates/users/register.html -->
{% extends 'users/base.html' %}
{% block content %}
<a href="{% url 'login' %}">Login</a> | <a href="{% url 'register' %}">Register</a>
<h2>Register</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>
{% endblock %}
7. home.html
<!-- accounts/templates/users/home.html -->
{% extends 'users/base.html' %}
{% block content %}
{% if request.user.is_authenticated %}
<p>{{ request.user.username }}</p>
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Login</a>
<a href="{% url 'register' %}">Register</a>
{% endif %}
<h1>Welcome!</h1>
{% endblock %}
8. Implementing Login and Logout Views
Add the following views to your accounts/views.py:
# accounts/views.py
from django.contrib.auth import authenticate, login, logout
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home') # Redirect to your home page
return render(request, 'users/login.html')
def user_logout(request):
logout(request)
return redirect('home') # Redirect to your home page
def user_home(request):
return render(request, 'users/home.html')
9. Creating Login Template
Create a login template (templates/users/login.html) in your accounts app:
<!-- accounts/templates/users/login.html -->
{% extends 'users/base.html' %}
{% block content %}
<a href="{% url 'login' %}">Login</a> | <a href="{% url 'register' %}">Register</a>
<h2>Login</h2>
<form method="post">
{% csrf_token %}
<label for="username">Username:</label>
<input type="text" name="username" required><br>
<label for="password">Password:</label>
<input type="password" name="password" required><br>
<button type="submit">Login</button>
<a href="{% url 'register' %}">Don't have Click here to create.</a>
</form>
{% endblock %}
10. URL Configuration
Create and Configure URLs in your accounts/urls.py:
# accounts/urls.py
from django.urls import path
from .views import register, user_login, user_logout, user_home
urlpatterns = [
path('', user_home, name='home'),
path('register/', register, name='register'),
path('login/', user_login, name='login'),
path('logout/', user_logout, name='logout'),
]
Include these URLs in your project's urls.py:
# project/urls.py
from django.urls import path, include
urlpatterns = [
...............
path('accounts/', include('accounts.urls')),
]
11. Open pgAdmin (I am using PostgreSQL database) and create database i. e LoginRegisterLogout1
12. Run Migrations
Run migrations to apply changes to the database:
python manage.py makemigrations
python manage.py migrate
10. Run the Development Server
Start the development server:
python manage.py runserver
Visit
http://127.0.0.1:8000/accounts/register/
http://127.0.0.1:8000/accounts/login/
and
http://127.0.0.1:8000/accounts/logout/
to test your register, login, and logout functionality.
This is a basic example, and you may wish to customize it according to your project's requirements. This may involve adding features such as user profiles, password reset functionality, and more.