Django login & logout using Sessions
Tags: django, sessions
Published: 2020-12-04 04:06:27

Hi Everyone, 
In this post, I m showing to you how to use **Django** Sessions for **Login** and **Logout**.

First of all you have to create project **dj_admin** and then startapp **app1**. After this you have to add **app1** in settings **INSTALLED_APPS**. Then include apps urls in main project urls.




# views.py
```
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import User


# Create your views here.
def home(request):
	if 'user' in request.session:
		current_user = request.session['user']
		param = {'current_user': current_user}
		return render(request, 'base.html', param)
	else:
		return redirect('login')
	return render(request, 'login.html')



def signup(request):
	if request.method == 'POST':
		uname = request.POST.get('uname')
		pwd = request.POST.get('pwd')
		# print(uname, pwd)
		if User.objects.filter(username=uname).count()>0:
			return HttpResponse('Username already exists.')
		else:
			user = User(username=uname, password=pwd)
			user.save()
			return redirect('login')
	else:
		return render(request, 'signup.html')



def login(request):
	if request.method == 'POST':
		uname = request.POST.get('uname')
		pwd = request.POST.get('pwd')

		check_user = User.objects.filter(username=uname, password=pwd)
		if check_user:
			request.session['user'] = uname
			return redirect('home')
		else:
			return HttpResponse('Please enter valid Username or Password.')

	return render(request, 'login.html')


def logout(request):
	try:
		del request.session['user']
	except:
		return redirect('login')
	return redirect('login')

```

# urls.py
```
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('login/', views.login, name='login'),
    path('logout/', views.logout, name='logout'),
    path('signup/', views.signup, name='signup'),
]
```

# models.py
```
from django.db import models

# Create your models here.
class User(models.Model):
	username = models.CharField(max_length=30)
	password = models.CharField(max_length=50)

	def __str__(self):
		return self.username
    
```

# Code in Templates
## 1.) create base.html
```
<!DOCTYPE html>
<html>
<head>
	<title>{% block title %}{% endblock %}</title>
</head>
<body>
	<h1>My Site</h1>

	<a href="/">Home</a>
	<span>/</span>

	{% if current_user %}
		<a href="{% url 'logout' %}">Logout</a>
		<hr>
		<h2>Welcome <span style="color: dodgerblue;">{{current_user}}</span>!</h2>
	{% else %}
		<a href="{% url 'login' %}">Login</a>
		<span>/</span>
		<a href="{% url 'signup' %}">Sign Up</a>
		<hr>
		<h2>Login to access this website!</h2>
	{% endif %}


	{% block body %}{% endblock %}
</body>
</html>
```

## 2. create login.html
```
{% extends 'base.html' %}
{% block title %}Login{% endblock %}

{% block body %}
	<h2>Login</h2>

	<form method="POST">
		{% csrf_token %}
		<input type="text" name="uname" placeholder="User Name">
		<br><br>
		<input type="text" name="pwd" placeholder="Password">
		<br><br>
		<input type="submit" name="submit" value="Login">
	</form>


{% endblock %}
```

## 3. create signup.html
```
{% extends 'base.html' %}
{% block title %}Sing Up{% endblock %}

{% block body %}
	<h2>Sign Up</h2>
	
	<form method="POST">
		{% csrf_token %}
		<input type="text" name="uname" placeholder="Username">
		<br><br>
		<input type="text" name="pwd" placeholder="Password">
		<br><br>
		<input type="submit" name="submit" value="Sign Up">
	</form>

{% endblock %}
```

Or you can check my GitHub Profile using this [Link](https://github.com/MadhubanKhatri/login-logout-django-sessions)