In this blog post, you will find solutions for the Full Stack Web Development (21CS62) course work for the VI semester of VTU university. To follow along, you will need to have up a machine running any flavour of GNULinux OS. We recommend using the Bash shell for this lab. The solutions have been tested on Ubuntu 22.04 OS. You can find the lab syllabus on the university’s website or here below.
All these solutions have been maintained at the following git repository shown below. If you want to contribute send me a PR.
https://gitlab.com/lab_manuals/current/vi-semester/21cs62_fullstack_development
After getting the necessary development environment setup, Now lets focus on the solutions.
Module 1
Module 2
Module 3
Module 4
Module 5
Module 1
Question 1
Installation
Installation of Python, Django and Visual Studio code editors can be demonstrated.
Here’s a step-by-step guide to installing Python, Django, and Visual Studio Code on Ubuntu.
Step 1: Install Python
Ubuntu typically comes with Python pre-installed. To check the installed version and install Python 3 if it’s not already available, follow these commands:
Update package lists:
sudo apt updateCheck if Python is installed:
python3 --version
If Python 3 is not installed, install it:
sudo apt install python3
Step 2: Install pip (Python Package Installer)
First, update pip to the latest version:
sudo apt install python3-pipStep 3: Install Django
Use pip to install Django:
pip3 install djangoVerify the installation:
django-admin --versionStep 4: Install Visual Studio Code
- Download the
.debpackage for Visual Studio Code from the official website: Download Visual Studio Code for Linux. - Once the download is complete, navigate to the directory containing the
.debfile in the terminal. - Install Visual Studio Code using
dpkg:
sudo dpkg -i <package-file-name>.debReplace <package-file-name> with the name of the .deb package you downloaded.
Resolve dependencies, if any:
sudo apt install -fStep 5: Launch Visual Studio Code
You can launch Visual Studio Code from the applications menu, or by running code from the terminal.
Additional Step (Optional)
Install Python Extension in Visual Studio Code: Launch Visual Studio Code, go to Extensions (Ctrl+Shift+X), search for “Python”, and install the official Python extension by Microsoft.
Now you should have Python, Django, and Visual Studio Code installed and ready to use on your Ubuntu system. You can start developing Django projects using Visual Studio Code as your editor.
Question 2
Creation of virtual environment, Django project and App should be demonstrated.
Here are the detailed steps to create a virtual environment, set up a Django project, and create a Django app on Ubuntu.
Step 1: Install Virtualenv
Install virtualenv using pip:
pip3 install virtualenvStep 2: Create a Virtual Environment
Navigate to the directory where you want to create your project:
cd /path/to/your/projectCreate a virtual environment:
putta:~/.../M1P2$ virtualenv venv
created virtual environment CPython3.11.7.final.0-64 in 467ms
creator CPython3Posix(dest=/home/putta/GitRepos/FINAL/VI/21cs62_fullstack_development/Programs/M01/M1P2/venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/putta/.local/share/virtualenv)
added seed packages: pip==24.0, setuptools==69.5.1, wheel==0.43.0
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
This will create a directory named venv containing the virtual environment.
Activate the virtual environment:
source venv/bin/activateYou should see (venv) preceding your command prompt, indicating that the virtual environment is active.
Step 3: Install Django in the Virtual Environment
Install Django:
putta:~/.../M1P2$ pip install django
Collecting django
Downloading Django-5.0.6-py3-none-any.whl.metadata (4.1 kB)
Collecting asgiref<4,>=3.7.0 (from django)
Downloading asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
Collecting sqlparse>=0.3.1 (from django)
Downloading sqlparse-0.5.0-py3-none-any.whl.metadata (3.9 kB)
Downloading Django-5.0.6-py3-none-any.whl (8.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2/8.2 MB 17.4 MB/s eta 0:00:00
Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)
Downloading sqlparse-0.5.0-py3-none-any.whl (43 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.0/44.0 kB 599.5 kB/s eta 0:00:00
Installing collected packages: sqlparse, asgiref, django
Successfully installed asgiref-3.8.1 django-5.0.6 sqlparse-0.5.0
Step 4: Create a Django Project
Create a new Django project:
django-admin startproject myprojectThis will create a directory named myproject with the following structure:
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
wsgi.py
Navigate into the project directory:
cd myprojectStep 5: Create a Django App
Create a new Django app within the project:
python manage.py startapp myappThis will create a directory named myapp with the following structure:
myapp/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
Step 6: Add the App to the Project
Open myproject/settings.py in a text editor (e.g., Visual Studio Code):
code myproject/settings.pyAdd myapp to the INSTALLED_APPS list:
INSTALLED_APPS = [
...
'myapp',
]After adding it may appear like this
Step 7: Run the Development Server
Apply migrations:
putta:~/.../myproject$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
Run the development server:
python manage.py runserverOpen your web browser and navigate to http://127.0.0.1:8000/ to see the default Django welcome page.
Summary
You’ve now successfully:
- Created a virtual environment.
- Installed Django within the virtual environment.
- Created a new Django project named
myproject. - Created a new Django app named
myapp. - Configured the project to include the new app.
- Run the Django development server to test the setup.
You can now start developing your Django application by adding models, views, and templates within your myapp directory.
Question 3
Current Date and Time
Develop a Django app that displays current date and time in server.
Let’s create a Django app that displays the current date and time on a web page. We’ll go through the following steps:
- Set up the Django project and app.
- Create a view to display the current date and time.
- Configure URLs.
- Create a template to display the date and time.
- Run the server and test the application.
Step-by-Step Guide
Step 1: Set Up the Django Project and App
Create a Django project (if not already created):
django-admin startproject mydatetime
cd mydatetimeCreate a Django app named datetime_display:
python manage.py startapp datetime_displayAdd datetime_display to INSTALLED_APPS in myproject/settings.py:
# myproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'datetime_display', # Add your app here
]Also in the settings.py file of your project, set the TIME_ZONE variable to ‘Asia/Kolkata’ (which corresponds to IST):
# myproject/settings.py
TIME_ZONE = 'Asia/Kolkata'
USE_TZ = TrueStep 2: Create a View to Display the Current Date and Time
Edit the views.py file in the datetime_display app:
# datetime_display/views.py
from django.shortcuts import render
from django.http import HttpResponse
from datetime import datetime
def current_datetime(request):
now = datetime.now()
context = {
'current_date': now,
}
return render(request, 'datetime_display/current_datetime.html', context)Step 3: Configure URLs
Create a urls.py file in the datetime_display app:
# datetime_display/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('current_datetime/', views.current_datetime, name='current_datetime'),
]Include the datetime_display URLs in the main urls.py file:
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('datetime_display.urls')), # Include the app URLs
]Step 4: Create a Template to Display the Date and Time
Create a directory named templates in the datetime_display app:
mkdir datetime_display/templates
mkdir datetime_display/templates/datetime_displayCreate a template file current_datetime.html in the datetime_display/templates/datetime_display directory
<!-- datetime_display/templates/datetime_display/current_datetime.html -->
<!DOCTYPE html>
<html>
<head>
<title>Current Date and Time</title>
</head>
<body>
<h1>Current Date and Time</h1>
<p>{{ current_date }}</p>
</body>
</html>Step 5: Run the Server and Test the Application
Run the Django development server:
python manage.py runserverOpen a web browser and navigate to http://127.0.0.1:8000/current_datetime/ to see the current date and time displayed on the web page.
Summary
You’ve now created a Django app that displays the current date and time. Here’s a summary of what we did:
- Created a Django project and an app named
datetime_display. - Added the app to the
INSTALLED_APPSlist. - Created a view to get the current date and time.
- Configured the URLs to route to the view.
- Created a template to display the date and time.
- Ran the server and tested the application.
Question 4
Time Offset
Develop a Django app that displays date and time four hours ahead and four hours before as an offset of current date and time in server.
Let’s develop a Django app that displays the current date and time, along with the date and time four hours ahead and four hours before the current date and time.
Step 1: Set Up the Django Project and App
Create a Django project (if not already created):
django-admin startproject timeoffset
cd timeoffsetCreate a Django app named time_offset:
python manage.py startapp time_offsetAdd time_offset to INSTALLED_APPS in myproject/settings.py and set the time zone:
# timeoffset/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'time_offset', # Add your app here
]
# Set the timezone
TIME_ZONE = 'Asia/Kolkata'
USE_TZ = True
Step 2: Create Views to Display the Date and Time
Edit the views.py file in the time_offset app:
# time_offset/views.py
from django.shortcuts import render
from django.utils import timezone
from datetime import timedelta
def current_datetime(request):
now = timezone.now()
four_hours_ahead = now + timedelta(hours=4)
four_hours_before = now - timedelta(hours=4)
context = {
'current_date': now,
'four_hours_ahead': four_hours_ahead,
'four_hours_before': four_hours_before,
}
return render(request, 'time_offset/current_datetime.html', context)Step 3: Configure URLs
Create a urls.py file in the time_offset app:
# time_offset/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('time_offsets/', views.current_datetime, name='current_datetime'),
]Include the time_offset URLs in the main urls.py file:
# timeoffset/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('time_offset.urls')), # Include the app URLs
]
Step 4: Create a Template to Display the Dates and Times
Create a directory named templates in the time_offset app:
mkdir -p time_offset/templates/time_offsetCreate a template file current_datetime.html in the time_offset/templates/time_offset directory:
<!-- time_offset/templates/time_offset/current_datetime.html -->
<!DOCTYPE html>
<html>
<head>
<title>Current Date and Time with Offsets</title>
</head>
<body>
<h1>Current Date and Time (IST)</h1>
<p>Current Date and Time: {{ current_date|date:"Y-m-d H:i:s T" }}</p>
<p>Four Hours Ahead: {{ four_hours_ahead|date:"Y-m-d H:i:s T" }}</p>
<p>Four Hours Before: {{ four_hours_before|date:"Y-m-d H:i:s T" }}</p>
</body>
</html>
Step 5: Run the Server and Test the Application
Run the Django development server:
python manage.py runserverOpen a web browser and navigate to http://127.0.0.1:8000/time_offsets/ to see the current date and time displayed on the web page.
You’ve now created a Django app that displays:
- The current date and time.
- The date and time four hours ahead.
- The date and time four hours before.
Here’s a summary of what we did:
- Created a Django project and an app named
time_offset. - Added the app to the
INSTALLED_APPSlist. - Created a view to calculate the required times.
- Configured the URLs to route to the view.
- Created a template to display the date and time with the offsets.
- Ran the server and tested the application.
Module 2
Question 1
Develop a simple Django app that displays an unordered list of fruits and ordered list of selected students for an event.
Let’s develop a Django app that displays an unordered list of fruits and an ordered list of selected students for a programming contest.
Step 1: Set Up the Django Project and App
Create a Django project (if not already created):
django-admin startproject mylist
cd mylist/Create a Django app named lists_display:
python manage.py startapp lists_displayAdd lists_display to INSTALLED_APPS in mylist/settings.py:
# mylist/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'lists_display', # Add your app here
]Step 2: Create Views to Display the Lists
Edit the views.py file in the lists_display app:
# lists_display/views.py
from django.shortcuts import render
def display_lists(request):
fruits = ['Apple', 'Banana', 'Mango', 'Jackfruit', 'Grapes']
students = ['Jamal', 'Suresh', 'Charlie', 'Divya', 'Raja']
context = {
'fruits': fruits,
'students': students,
}
return render(request, 'lists_display/display_lists.html', context)
Step 3: Configure URLs
Create a urls.py file in the lists_display app:
# lists_display/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('display_lists/', views.display_lists, name='display_lists'),
]Include the lists_display URLs in the main urls.py file:
# mylist/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('lists_display.urls')), # Include the app URLs
]
Step 4: Create a Template to Display the Lists
Create a directory named templates in the lists_display app:
mkdir -p lists_display/templates/lists_displayCreate a template file display_lists.html in the lists_display/templates/lists_display directory:
<!-- lists_display/templates/lists_display/display_lists.html -->
<!DOCTYPE html>
<html>
<head>
<title>Display Lists</title>
</head>
<body>
<h1>Fruits (Unordered List)</h1>
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}
</ul>
<h1>Selected Students for Programming Contest (Ordered List)</h1>
<ol>
{% for student in students %}
<li>{{ student }}</li>
{% endfor %}
</ol>
</body>
</html>
Step 5: Run the Server and Test the Application
Run the Django development server:
python manage.py runserverOpen a web browser and navigate to http://127.0.0.1:8000/display_lists/ to see the current date and time displayed on the web page.
You’ve now created a Django app that displays:
- An unordered list of fruits.
- An ordered list of selected students for a programming contest.
Here’s a summary of what we did:
- Created a Django project and an app named
lists_display. - Added the app to the
INSTALLED_APPSlist. - Created a view to provide the lists.
- Configured the URLs to route to the view.
- Created a template to display the lists.
- Ran the server and tested the application.
Question 2
Website Layout
Develop a layout.html with a suitable header (containing navigation menu) and footer with copyright and developer information. Inherit this layout.html and create 3 additional pages: Contact us, About Us and Home page of any website.
Let’s create a Django app with a base layout that includes a header with a navigation menu and a footer. Then, we’ll create three additional pages: “Contact Us,” “About Us,” and “Home” for a college website, all of which will inherit from this base layout.
Step 1: Set Up the Django Project and App
Create a Django project (if not already created):
django-admin startproject mycollege
cd mycollegeCreate a Django app named website:
python manage.py startapp websiteAdd website to INSTALLED_APPS in mycollege/settings.py:
# mycollege/settings.py
import os
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'website', # Add your app here
]
Step 2: Create the Base Layout Template
Create directories for templates:
mkdir -p website/templates/websiteCreate layout.html template in the website/templates/website directory:
<!-- website/templates/website/layout.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}College Website{% endblock %}</title>
</head>
<body>
<header>
<h1>Welcome to Our College</h1>
<nav>
<ul>
<li><a href="{% url 'home' %}">Home</a></li>
<li><a href="{% url 'about' %}">About Us</a></li>
<li><a href="{% url 'contact' %}">Contact Us</a></li>
</ul>
</nav>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>© 2024 My College. All rights reserved.</p>
<p>Developed by Your Name</p>
</footer>
</body>
</html>Step 3: Create the Additional Pages
Create home.html template:
<!-- website/templates/website/home.html -->
{% extends 'website/layout.html' %}
{% load static %}
{% block title %}Home{% endblock %}
{% block content %}
<h2>Home Page</h2>
<p>Welcome to the home page of our college website.</p>
<img src="{% static 'images/college.jpg' %}" alt="Vidyamitra" width="250" height="150">
{% endblock %}
Create a static directory in your project root if it does not already exist, Create an images directory within the static directory:
mkdir -p static/imagesAdd your image file to the static/images directory. For this example, let’s assume your image is named college.jpg
Create about.html template:
<!-- website/templates/website/about.html -->
{% extends 'website/layout.html' %}
{% block title %}About Us{% endblock %}
{% block content %}
<h2>About Us</h2>
<p>Learn more about our college, our history, and our mission.</p>
{% endblock %}Create contact.html template:
<!-- website/templates/website/contact.html -->
{% extends 'website/layout.html' %}
{% block title %}Contact Us{% endblock %}
{% block content %}
<h2>Contact Us</h2>
<p>Get in touch with us for more information.</p>
{% endblock %}Step 4: Create Views for Each Page
Edit the views.py file in the website app:
# website/views.py
from django.shortcuts import render
def home(request):
return render(request, 'website/home.html')
def about(request):
return render(request, 'website/about.html')
def contact(request):
return render(request, 'website/contact.html')Step 5: Configure URLs
Create a urls.py file in the website app:
# website/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about/', views.about, name='about'),
path('contact/', views.contact, name='contact'),
]Include the website URLs in the main urls.py file:
# mycollege/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('website.urls')), # Include the app URLs
]Step 6: Run the Server and Test the Application
Run the Django development server:
python manage.py runserverOpen a web browser and navigate to:
http://127.0.0.1:8000/for the Home page.http://127.0.0.1:8000/about/for the About Us page.http://127.0.0.1:8000/contact/for the Contact Us page.
Question 3
Course Registration
Develop a Django app that performs student registration to a course. It should also display list
of students registered for any selected course. Create students and course as models with enrolment as ManyToMany field.
To develop a Django app that handles student registration to courses and displays a list of students registered for any selected course, you can follow these steps:
Step 1: Set Up the Django Project and App
Create a Django project (if not already created):
django-admin startproject mycollege
cd mycollegeCreate a Django app named courses:
python manage.py startapp coursesAdd courses to INSTALLED_APPS in mycollege/settings.py:
# mycollege/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'courses', # Add your app here
]Step 2: Create Models
Edit models.py in the courses app to create Student and Course models with a ManyToMany relationship:
# courses/models.py
from django.db import models
class Student(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
def __str__(self):
return f"{self.first_name} {self.last_name}"
class Course(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
students = models.ManyToManyField(Student, related_name='courses')
def __str__(self):
return self.name
Create and apply the migrations:
python manage.py makemigrations
python manage.py migrateStep 3: Create Admin Interface
Register the models in the admin site by editing admin.py:
# courses/admin.py
from django.contrib import admin
from .models import Student, Course
class StudentAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name', 'email')
class CourseAdmin(admin.ModelAdmin):
list_display = ('name', 'description')
search_fields = ('name',)
filter_horizontal = ('students',)
admin.site.register(Student, StudentAdmin)
admin.site.register(Course, CourseAdmin)
Step 4: Create Forms for Registration
Create a forms.py file in the courses app to handle the registration form:
# courses/forms.py
from django import forms
from .models import Student, Course
class StudentRegistrationForm(forms.ModelForm):
class Meta:
model = Student
fields = ['first_name', 'last_name', 'email']
class CourseSelectionForm(forms.Form):
course = forms.ModelChoiceField(queryset=Course.objects.all(), required=True, label="Select a Course")
Step 5: Create Views for Registration and Displaying Students
Edit views.py to create views for student registration and displaying students by course:
# courses/views.py
from django.shortcuts import render, redirect, get_object_or_404
from .models import Student, Course
from .forms import StudentRegistrationForm, CourseSelectionForm
def register_student(request):
if request.method == 'POST':
form = StudentRegistrationForm(request.POST)
if form.is_valid():
student = form.save()
return redirect('select_course', student_id=student.id)
else:
form = StudentRegistrationForm()
return render(request, 'courses/register_student.html', {'form': form})
def select_course(request, student_id):
student = get_object_or_404(Student, id=student_id)
if request.method == 'POST':
form = CourseSelectionForm(request.POST)
if form.is_valid():
course = form.cleaned_data['course']
course.students.add(student)
return redirect('course_students', course_id=course.id)
else:
form = CourseSelectionForm()
return render(request, 'courses/select_course.html', {'form': form, 'student': student})
def course_students(request, course_id):
course = get_object_or_404(Course, id=course_id)
students = course.students.all()
return render(request, 'courses/course_students.html', {'course': course, 'students': students})
Step 6: Configure URLs
Create a urls.py file in the courses app:
# courses/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register_student, name='register_student'),
path('select_course/<int:student_id>/', views.select_course, name='select_course'),
path('course_students/<int:course_id>/', views.course_students, name='course_students'),
]
Include the courses URLs in the main urls.py file:
# mycollege/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('courses.urls')), # Include the app URLs
]
Step 7: Create Templates
Create a directory named templates in the courses app:
mkdir -p courses/templates/coursesCreate register_student.html template:
<!-- courses/templates/courses/register_student.html -->
<!DOCTYPE html>
<html>
<head>
<title>Register Student</title>
</head>
<body>
<h1>Register Student</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Register</button>
</form>
</body>
</html>
Create select_course.html template:
<!-- courses/templates/courses/select_course.html -->
<!DOCTYPE html>
<html>
<head>
<title>Select Course</title>
</head>
<body>
<h1>Select Course for {{ student.first_name }} {{ student.last_name }}</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Enroll</button>
</form>
</body>
</html>Create course_students.html template:
<!-- courses/templates/courses/course_students.html -->
<!DOCTYPE html>
<html>
<head>
<title>Students Enrolled in {{ course.name }}</title>
</head>
<body>
<h1>Students Enrolled in {{ course.name }}</h1>
<ul>
{% for student in students %}
<li>{{ student.first_name }} {{ student.last_name }}</li>
{% endfor %}
</ul>
<a href="{% url 'register_student' %}">Register another student</a>
</body>
</html>
Step 8: Add Initial Courses
Create a Django management command to add initial courses:
Create a directory named management/commands inside the courses app:
mkdir -p courses/management/commandsCreate a new file named add_initial_courses.py inside the commands directory:
touch courses/management/commands/add_initial_courses.pyEdit the add_initial_courses.py file to add the initial courses:
# courses/management/commands/add_initial_courses.py
from django.core.management.base import BaseCommand
from courses.models import Course
class Command(BaseCommand):
help = 'Add initial courses to the database'
def handle(self, *args, **kwargs):
courses = [
{'name': 'Mathematics', 'description': 'Basic Mathematics'},
{'name': 'Physics', 'description': 'Fundamentals of Physics'},
{'name': 'Chemistry', 'description': 'Basics of Chemistry'},
{'name': 'Biology', 'description': 'Introduction to Biology'},
{'name': 'Computer Science', 'description': 'Basics of Computer Science'},
]
for course in courses:
Course.objects.get_or_create(name=course['name'], defaults={'description': course['description']})
self.stdout.write(self.style.SUCCESS('Successfully added initial courses'))Run the custom management command to add initial courses:
python manage.py add_initial_coursesStep 9: Run the Server and Test the Application
Run the Django development server:
python manage.py runserverOpen a web browser and navigate to:
- Open
http://127.0.0.1:8000/register/to register a student. - After registering a student, you should be redirected to the course selection page where you can select a course for the student.
- After selecting a course, you should be redirected to the list of students enrolled in that course.
Summary
By following these steps, you ensure that some initial courses are added to the database, allowing the course selection drop-down to display options when registering a student. This complete solution handles student registration, course selection, and displaying students registered for any selected course, ensuring that the functionality is correct and the initial data is in place.
Module 3
Question 1
For student and course models created in Lab experiment for Module2, register admin interfaces, perform migrations and illustrate data entry through admin forms.
To register the Student and Course models in the Django admin interface, perform the necessary migrations, and illustrate data entry through admin forms, follow these steps:
Step 1: Register Models in Admin Interface
Edit admin.py in the courses app to register the models:
# courses/admin.py
from django.contrib import admin
from .models import Student, Course
class StudentAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name', 'email')
class CourseAdmin(admin.ModelAdmin):
list_display = ('name', 'description')
search_fields = ('name',)
filter_horizontal = ('students',)
admin.site.register(Student, StudentAdmin)
admin.site.register(Course, CourseAdmin)
Step 2: Perform Migrations
Create the initial migration files for the models:
python manage.py makemigrationsApply the migrations to update the database schema:
python manage.py migrateStep 3: Illustrate Data Entry Through Admin Forms
Create a superuser to access the admin interface:
python manage.py createsuperuserFollow the prompts to create the superuser account (enter a username, email, and password).
Run the Django development server:
python manage.py runserverOpen a web browser and navigate to the admin interface:
- Go to
http://127.0.0.1:8000/admin/ - Log in with the superuser account you just created.
Add data using the admin interface:
- After logging in, you will see the
StudentsandCoursesmodels registered in the admin interface.
Adding Students:
- Click on “Students” in the admin interface.
- Click on “Add Student” to add a new student.
- Fill in the “First name,” “Last name,” and “Email” fields.
- Click “Save” to create the student.
Adding Courses:
- Click on “Courses” in the admin interface.
- Click on “Add Course” to add a new course.
- Fill in the “Name” and “Description” fields.
- In the “Students” field, you can select students to enroll in this course.
- Click “Save” to create the course.
Summary
By following these steps, you’ve successfully registered the Student and Course models in the Django admin interface, performed the necessary migrations, and illustrated how to enter data through admin forms. Here is a summary of what we did:
- Registered the
StudentandCoursemodels in the admin interface with customized display and search options. - Created and applied migrations to update the database schema.
- Created a superuser to access the admin interface.
- Added data for students and courses using the Django admin interface.
Question 2
Develop a Model form for student that contains his topic chosen for project, languages used and
duration with a model called project.
To develop a Django project with a Project model containing fields for topic, languages used, and duration, and a Student model with a ForeignKey relationship to Project, we’ll follow these steps:
Step 1: Set Up the Django Project and App
Create a Django project:
django-admin startproject student_project
cd student_projectCreate a Django app named registration:
python manage.py startapp registrationAdd registration to INSTALLED_APPS in student_project/settings.py:
# student_project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'registration', # Add your app here
]Step 2: Create Models
Edit models.py in the registration app to create Student and Project models:
# registration/models.py
from django.db import models
class Project(models.Model):
topic = models.CharField(max_length=200)
languages_used = models.CharField(max_length=200)
duration = models.CharField(max_length=100)
def __str__(self):
return self.topic
class Student(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
project = models.OneToOneField(Project, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return f"{self.first_name} {self.last_name}"Create and apply the migrations:
python manage.py makemigrations
python manage.py migrateStep 3: Create Forms
Create a forms.py file in the registration app to handle the registration form:
# registration/forms.py
from django import forms
from .models import Student, Project
class ProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ['topic', 'languages_used', 'duration']
class StudentForm(forms.ModelForm):
class Meta:
model = Student
fields = ['first_name', 'last_name', 'email']Step 4: Create Views
Edit views.py to create views for student and project registration:
# registration/views.py
from django.shortcuts import render, redirect
from .forms import StudentForm, ProjectForm
from .models import Student
def register_student(request):
if request.method == 'POST':
student_form = StudentForm(request.POST)
project_form = ProjectForm(request.POST)
if student_form.is_valid() and project_form.is_valid():
project = project_form.save()
student = student_form.save(commit=False)
student.project = project
student.save()
return redirect('student_list')
else:
student_form = StudentForm()
project_form = ProjectForm()
return render(request, 'registration/register_student.html', {'student_form': student_form, 'project_form': project_form})
def student_list(request):
students = Student.objects.all()
return render(request, 'registration/student_list.html', {'students': students})
Step 5: Configure URLs
Create a urls.py file in the registration app:
# registration/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register_student, name='register_student'),
path('students/', views.student_list, name='student_list'),
]Include the registration URLs in the main urls.py file:
# student_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('registration/', include('registration.urls')), # Include the app URLs
]
Step 6: Create Templates
Create a directory named templates in the registration app and create subdirectories for the templates:
mkdir -p registration/templates/registrationCreate register_student.html template:
<!-- registration/templates/registration/register_student.html -->
<!DOCTYPE html>
<html>
<head>
<title>Register Student Project</title>
</head>
<body>
<h1>Register Student Project</h1>
<form method="post">
{% csrf_token %}
{{ student_form.as_p }}
{{ project_form.as_p }}
<button type="submit">Register</button>
</form>
</body>
</html>Create student_list.html template:
<!-- registration/templates/registration/student_list.html -->
<!DOCTYPE html>
<html>
<head>
<title>Student Projects List</title>
</head>
<body>
<h1>Registered Student Projects</h1>
<ul>
{% for student in students %}
<li>{{ student.first_name }} {{ student.last_name }} - {{ student.project.topic }}</li>
<ul>
<li>Languages used : {{student.project.languages_used}}</li>
<li>Project Duration : {{student.project.duration}}</li>
</ul>
{% endfor %}
</ul>
<a href="{% url 'register_student' %}">Register another student project</a>
</body>
</html>
Step 7: Run the Server and Test the Application
Run the Django development server:
python manage.py runserver
Open a web browser and navigate to:
http://127.0.0.1:8000/registration/register/to register a student and their project.http://127.0.0.1:8000/registration/students/to view the list of registered students and their projects.
Summary
By following these steps, you create a Django app that allows student registration along with project details (topic, languages used, and duration). This solution includes model definitions, forms, views, templates, and URL configurations to achieve the desired functionality.
If you are also looking for other Lab Manuals, head over to my following blog :
