A
Assignment
On
Python Web Development (BTFS702)
Submitted To: Submitted by:
Dr. Gagandeep Singh Arun Mishra
GU-2022-4317
Btech CSE 6B
SCHOOL OF ENGINEERING DESIGN AND AUTOMATION
DEPARTMENT OF COMPUTER SCIENCE
Q1: You are developing a food delivery service. Build a backend API using Django REST Framework
to expose restaurant, menu, and order data. Demonstrate how these APIs are consumed and
secured.
Solution:
1. Setup Django Project & App pip
install djangorestframework django-admin
startproject food_delivery cd food_delivery
python [Link] startapp api
2. Add to [Link]: INSTALLED_APPS
=[
3. ...
'rest_framework',
'api',
4. Define Models in api/[Link]:
from [Link] import models
class Restaurant([Link]):
name = [Link](max_length=100)
location = [Link](max_length=200)
class MenuItem([Link]):
restaurant = [Link](Restaurant, on_delete=[Link])
name = [Link](max_length=100)
price = [Link](max_digits=6, decimal_places=2)
class Order([Link]):
menu_item = [Link](MenuItem, on_delete=[Link])
quantity = [Link]()
order_time = [Link](auto_now_add=True)
4. Create Serializers in api/[Link]:
from rest_framework import serializers from
.models import Restaurant, MenuItem, Order
class RestaurantSerializer([Link]):
class Meta: model = Restaurant
fields = '__all__'
class MenuItemSerializer([Link]):
class Meta:
model = MenuItem
fields = '__all__'
class OrderSerializer([Link]):
class Meta:
model = Order
fields = '__all__'
5. Create Views in api/[Link]: from rest_framework import viewsets from .models
import Restaurant, MenuItem, Order from .serializers import RestaurantSerializer,
MenuItemSerializer, OrderSerializer
class RestaurantViewSet([Link]):
queryset = [Link]()
serializer_class = RestaurantSerializer
class MenuItemViewSet([Link]):
queryset = [Link]()
serializer_class = MenuItemSerializer
class OrderViewSet([Link]):
queryset = [Link]()
serializer_class = OrderSerializer
6. Register URLs in api/[Link]:
from rest_framework.routers import DefaultRouter from .views import
RestaurantViewSet, MenuItemViewSet, OrderViewSet from [Link]
import path, include
router = DefaultRouter() [Link]('restaurants',
RestaurantViewSet) [Link]('menu',
MenuItemViewSet) [Link]('orders',
OrderViewSet)
urlpatterns = [ path('',
include([Link])),
7. Secure with Token Authentication:
pip install djangorestframework-simplejwt
Add to [Link]:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.[Link]',
], }
Use /api/token/ and /api/token/refresh/ for login and securing endpoints.
Q2: Design a Django-based blog API that can be consumed by mobile apps. Use Django REST
Framework to expose endpoints for viewing, creating, and updating blog posts. Add proper
serializers and authentication.
Solution:
1. Create Blog Model in blog/[Link]:
from [Link] import models from
[Link] import User class
Post([Link]):
title = [Link](max_length=200)
content = [Link]()
author = [Link](User,
on_delete=[Link])
created_at =
[Link](auto_now_add=True)
updated_at
[Link](auto_now=True)
2. Create Serializer: from rest_framework
import serializers from .models import Post
class PostSerializer([Link]):
class Meta: model = Post
fields = '__all__'
3. Create Views: from rest_framework
import viewsets, permissions from .models
import Post from .serializers import
PostSerializer
class PostViewSet([Link]):
queryset = [Link]() serializer_class = PostSerializer
permission_classes = [[Link]]
4. Register URLs: from
rest_framework.routers import DefaultRouter
from .views import PostViewSet
router = DefaultRouter() [Link]('posts',
PostViewSet) urlpatterns = [ path('',
include([Link])),
Use JWT or Session Authentication for securing API.
Q3: Build a personal task manager web app. Create dynamic forms to add and update tasks, with
validation for due dates and title length. Use advanced form handling techniques like class-based
views and model forms.
Solution:
1. Model in tasks/[Link]:
from [Link] import models from
[Link] import MinLengthValidator
class Task([Link]):
title = [Link](max_length=100, validators=[MinLengthValidator(5)])
due_date = [Link]()
completed = [Link](default=False)
2. Form in tasks/[Link]: from django import forms from .models import Task
class TaskForm([Link]):
class Meta:
model = Task fields = ['title',
'due_date', 'completed']
3. Views in tasks/[Link]:
from [Link] import ListView, CreateView, UpdateView
from .models import Task from .forms import TaskForm from
[Link] import reverse_lazy
class TaskListView(ListView):
model = Task template_name =
'tasks/task_list.html'
class TaskCreateView(CreateView):
model = Task form_class = TaskForm
template_name = 'tasks/task_form.html'
success_url = reverse_lazy('task-list')
class TaskUpdateView(UpdateView):
model = Task
form_class = TaskForm
template_name = 'tasks/task_form.html'
success_url = reverse_lazy('task-list')
Q4: Create a job application platform where users can register, apply for jobs, and track their
applications. Implement user authentication and form validation. Show the form handling process
with Django’s [Link].
Solution:
1. Models in jobs/[Link]:
from [Link] import models from
[Link] import User
class Job([Link]):
title = [Link](max_length=100)
description = [Link]()
class Application([Link]):
user = [Link](User, on_delete=[Link])
job = [Link](Job, on_delete=[Link])
resume = [Link](upload_to='resumes/')
applied_at = [Link](auto_now_add=True)
2. Forms in jobs/[Link]:
from django import forms
from .models import Application
class ApplicationForm([Link]):
class Meta:
model = Application
fields = ['job', 'resume']
3. Views in jobs/[Link]: from [Link]
import render, redirect from .forms import
ApplicationForm from .models import Job from
[Link] import login_required
@login_required def
apply_job(request): if
[Link] == 'POST':
form = ApplicationForm([Link], [Link])
if form.is_valid():
application = [Link](commit=False)
[Link] = [Link]
[Link]()
return redirect('application-success')
else:
form = ApplicationForm() return render(request,
'jobs/[Link]', {'form': form})