Exam Result Website | A Django Project
Tags: django, python, programming
Published: 2021-06-06 14:30:46

Hi,
New Project is available here. 

### Project Details
1. Name = Exam Result Website
2. Framework = Django (Python Framework)
3. About = Students can check their **Exam Result** using **Roll Number** and Admin can add new **Students** and edit/delete students data.
4. Available on = DEV , GitHub and YouTube

{% youtube k96seogHLJE%}

## Source Code
Create A New Project using this Command
```
django-admin startproject exam_result
```
Create A New App in Exam_Result Project
```
cd exam_result
python manage.py startapp main
```

Add your Main app in Settings.py file, like this
```python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'main'  #Add app here
]
```

Configure your Project's urls.py file
```python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls'))
]
```
Create Models in models.py
```python
from django.db import models

# Create your models here.
class Student(models.Model):
    name = models.CharField(max_length=100)
    roll_no = models.IntegerField()
    hindi = models.IntegerField(default=0)
    english = models.IntegerField(default=0)
    maths = models.IntegerField(default=0)
    science = models.IntegerField(default=0)
    total = models.IntegerField(default=0)
    perecent = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.name
```
Register your models in admin.py, like this
```python
from django.contrib import admin
from .models import Student

# Register your models here.
admin.site.register(Student)
```
Run these important Commands in Terminal
```python
python manage.py makemigrations
python manage.py migrate
```

####views.py
```python
from django.http.response import HttpResponse
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Student

# Create your views here.
def index(request):
    return render(request, 'index.html')


def result(request):
    if request.method == 'POST':
        rollNo = int(request.POST['roll_no'])
        student = Student.objects.get(roll_no=rollNo)
        hindi = student.hindi
        english = student.english
        maths = student.maths
        science = student.science
        total = hindi+english+maths+science
        percent = total/400*100
        if(percent<33):
            status = 'Fail'
        else:
            status = 'Pass'
        params = {
            'roll_no': rollNo,
            'name': student.name,
            'hindi': hindi,
            'english': english,
            'maths': maths,
            'science': science,
            'total': total,
            'percent': percent,
            'status': status
        }
        # print('get method', student.name)
        return render(request, 'result.html', params)
    else:
        print('get method')
    return render(request, 'result.html')



def admin_login(request):
    if 'user' in request.session:
        return render(request, 'admin_panel.html')
    else:
        return render(request, 'admin-login.html')
    


def admin_panel(request):
    if 'user' in request.session:
        students = Student.objects.all()
        params = {'students': students}
        return render(request, 'admin_panel.html',params)
    else:
        if request.method == 'POST':
            user_name = request.POST['uname']
            pass_word = request.POST['pwd']
            if user_name == 'admin' and pass_word == 'admin123':
                request.session['user'] = user_name
                students = Student.objects.all()
                params = {'students': students}
                return render(request, 'admin_panel.html', params)
            else:
                return render(request, 'admin-login.html')
        else:
            return render(request, 'admin-login.html')


def delete_student(request, id):
    get_stu = Student.objects.get(id=id)
    get_stu.delete()
    return redirect('/admin_panel')


def edit_student(request, id):
    get_stu = Student.objects.get(id=id)
    params = {'student': get_stu}
    return render(request, 'edit.html', params)


def edit_confirm(request, id):
    if request.method == 'POST':
        get_stu = Student.objects.get(id=id)
        get_stu.name = request.POST['sname']
        get_stu.roll_no = request.POST['roll-no']
        get_stu.hindi = request.POST['hindi']
        get_stu.english = request.POST['english']
        get_stu.maths = request.POST['maths']
        get_stu.science = request.POST['science']
        total = int(request.POST['hindi'])+int(request.POST['english'])+int(request.POST['maths'])+int(request.POST['science'])
        get_stu.total = total
        get_stu.perecent = total/4
        get_stu.save()
        return redirect('/admin_panel')
    else:
        return redirect('/admin_login')

def admin_logout(request):
    del request.session['user']
    return redirect('/')



def add_student(request):
    return render(request, 'add_student.html')


def add_confirm(request):
    if request.method == 'POST':
        sname = request.POST['sname']
        roll_no = request.POST['roll-no']
        hindi = int(request.POST['hindi'])
        english = int(request.POST['english'])
        maths = int(request.POST['maths'])
        science = int(request.POST['science'])
        total = hindi+english+maths+science
        percent = total/400*100
        add_student = Student.objects.create(name=sname,roll_no=roll_no,
                        hindi=hindi,english=english,maths=maths,science=science,
                        total=total,perecent=percent)
        add_student.save()
        return redirect('/admin_panel')
    else:
        return redirect('/admin_panel')
    
```

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

urlpatterns = [
    path('', views.index, name='index'),
    path('result/', views.result, name='result'),
    path('admin_login/', views.admin_login, name='admin-login'),
    path('admin_panel/', views.admin_panel, name='admin-panel'),
    path('delete-student/<int:id>/', views.delete_student, name='delete-student'),
    path('edit-student/<int:id>/', views.edit_student, name='edit-student'),
    path('edit-confirm/<int:id>/', views.edit_confirm, name='edit-confirm'),
    path('logout/', views.admin_logout, name='admin-logout'),
    path('add_student/', views.add_student, name='add_student'),
    path('add_confirm/', views.add_confirm, name='add_confirm'),
]
```

###Templates
####base.html
```html
<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">

    <title>{% block title %}{% endblock %}</title>
</head>

<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <div class="container-fluid">
            <a class="navbar-brand" href="#">Exam Result</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse"
                data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
                aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                    <li class="nav-item">
                        <a class="nav-link active" aria-current="page" href="{% url 'index' %}">Home</a>
                    </li>
                    <li class="nav-item">
                        {% if 'user' in request.session %}
                            <a class="nav-link btn btn-primary text-white" href="{% url 'admin-logout' %}">Logout</a>
                        {% else %}
                            <a class="nav-link btn btn-primary text-white" href="{% url 'admin-login' %}">Admin Panel</a>
                        {% endif %}
                    </li>
                        
                </ul>
                
            </div>
        </div>
    </nav>

    {% block body %}

    {% endblock %}

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4"
        crossorigin="anonymous"></script>

</body>

</html>
```

####index.html
```html
{% extends 'base.html' %}

{% block title%}
    Home   
{% endblock %}

{% block body %}
<div class="container w-25">
    <form action="{% url 'result' %}" method="post">
        {% csrf_token %}
    <div class="mb-3 my-5">
        <label for="roll_no" class="form-label">Roll Number</label>
        <input type="text" class="form-control" name="roll_no" id="roll_no">
    </div>
    <div class="mb-3">
        <input type="submit" value="See Result" class="btn btn-success"/>
    </div>
    </form>
</div>
{% endblock %}
```

####result.html
```html
{% extends 'base.html' %}


{% block title%}
    Result
{% endblock %}

{% block body %}
<table class="table my-4">
    <thead>
        <tr>
            <th scope="col">Roll No</th>
            <th scope="col">Name</th>
            <th scope="col">Hindi</th>
            <th scope="col">English</th>
            <th scope="col">Maths</th>
            <th scope="col">Science</th>
            <th scope="col">Total Marks</th>
            <th scope="col">Percentage</th>
            <th scope="col">Status</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <th scope="row">{{roll_no}}</th>
            <td>{{name}}</td>
            <td>{{hindi}}</td>
            <td>{{english}}</td>
            <td>{{maths}}</td>
            <td>{{science}}</td>
            <td>{{total}}</td>
            <td>{{percent}}</td>
            {% if status == 'Pass' %}
                <td><p class="btn btn-success">{{status}}</p></td>
            {% else %}
            <td><p class="btn btn-danger">{{status}}</p></td>
            {% endif %}
            
        </tr>
    
    </tbody>
</table>
{% endblock %}
```

####admin-login.html
```html
{% extends 'base.html' %}

{% block title%}
    Admin Login    
{% endblock %}

{% block body %}
<div class="container w-50 my-4">
    <form action="{% url 'admin-panel' %}" method="post">
        {% csrf_token %}
    <div class="mb-3">
        <label for="username" class="form-label"><b>Username</b></label>
        <input type="text" class="form-control" id="username" name="uname">
    </div>
    <div class="mb-3">
        <label for="password" class="form-label"><b>Password</b></label>
        <input type="password" class="form-control" id="password" name="pwd">
    </div>
    <div class="mb-3">
        <input type="submit" class="btn btn-success" value="Login">
    </div>
    </form>
</div>
{% endblock %}
```

####admin_panel.html
```html
{% extends 'base.html' %}

{% block title%}
    Admin Panel    
{% endblock %}

{% block body %}
<div class="container-fluid my-3">
    <a href="{% url 'add_student' %}" class="btn btn-warning">Add Student</a>
</div>
<table class="table table-primary my-4 table-hover">
    <thead>
        <tr>
            <th scope="col">Roll No.</th>
            <th scope="col">Name</th>
            <th scope="col">Hindi</th>
            <th scope="col">English</th>
            <th scope="col">Maths</th>
            <th scope="col">Science</th>
            <th scope="col">Total Marks</th>
            <th scope="col">Precentage</th>
            <th scope="col">Operations</th>

        </tr>
    </thead>
    <tbody>
        {% for s in students %}
        <tr>
            <th scope="row">{{s.roll_no}}</th>
            <td>{{s.name}}</td>
            <td>{{s.hindi}}</td>
            <td>{{s.english}}</td>
            <td>{{s.maths}}</td>
            <td>{{s.science}}</td>        
            <td>{{s.total}}</td>
            <td>{{s.perecent}}</td>
            <td>
                
                
                <a href="{% url 'edit-student' s.id %}" class="btn btn-small btn-primary" id='{s.id}'>Edit</a>
                

                <a href="{% url 'delete-student' s.id %}" class="btn btn-small btn-danger" id='{s.id}'>Delete</a>
                
            </td>
            
        </tr>
        {% endfor %}
    </tbody>
</table>

{% endblock %}
```

####edit.html
```html
{% extends 'base.html' %}

{% block title%}
Edit Panel
{% endblock %}

{% block body %}
<div class="container w-25 my-3">
    <div class="mb-3">
        <h4>Edit</h4>
    </div>
    <form action="{% url 'edit-confirm' student.id %}" method="post">
        {% csrf_token %}
        <div class="mb-3">
            <label for="name" class="form-label">Student Name</label>
            <input type="text" class="form-control" name="sname" value='{{student.name}}'>
        </div>
        <div class="mb-3">
            <label for="roll-no" class="form-label">Roll Number</label>
            <input type="text" class="form-control" name="roll-no" value='{{student.roll_no}}'>
        </div>
        <div class="mb-3">
            <label for="hindi" class="form-label">Hindi</label>
            <input type="text" class="form-control" name="hindi" value='{{student.hindi}}'>
        </div>
        <div class="mb-3">
            <label for="english" class="form-label">English</label>
            <input type="text" class="form-control" name="english" value='{{student.english}}'>
        </div>
        <div class="mb-3">
            <label for="maths" class="form-label">Maths</label>
            <input type="text" class="form-control" name="maths" value='{{student.maths}}'>
        </div>
        <div class="mb-3">
            <label for="science class=" form-label">Science</label>
            <input type="text" class="form-control" name="science" value='{{student.science}}'>
        </div>

        <input type="submit" class="form-control btn btn-success" value="Edit">

    </form>
</div>
{% endblock %}
```

####add_student.html
```html
{% extends 'base.html' %}

{% block title %}
Add Student
{% endblock %}

{% block body %}
<div class="container w-25">
    <h3>Add Student</h3>
    <form action="{% url 'add_confirm' %}" method="post">
        {% csrf_token %}
        <div class="mb-3">
            <label for="name" class="form-label">Student Name</label>
            <input type="text" class="form-control" name="sname">
        </div>
        <div class="mb-3">
            <label for="roll-no" class="form-label">Roll Number</label>
            <input type="text" class="form-control" name="roll-no" >
        </div>
        <div class="mb-3">
            <label for="hindi" class="form-label">Hindi</label>
            <input type="number" class="form-control" name="hindi">
        </div>
        <div class="mb-3">
            <label for="english" class="form-label">English</label>
            <input type="number" class="form-control" name="english">
        </div>
        <div class="mb-3">
            <label for="maths" class="form-label">Maths</label>
            <input type="number" class="form-control" name="maths">
        </div>
        <div class="mb-3">
            <label for="science class=" form-label">Science</label>
            <input type="number" class="form-control" name="science">

        </div>

        <input type="submit" class="form-control btn btn-success" value="Add">

    </form>
</div>
{% endblock %}
```

That's It.
If you face any problem related to this project you can message me and we will solve the problem.

**Code Is Also Available On [GITHUB](https://github.com/MadhubanKhatri)**