0% found this document useful (0 votes)
8 views7 pages

Django REST API for Web Applications

Uploaded by

Lalita
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views7 pages

Django REST API for Web Applications

Uploaded by

Lalita
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

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})

You might also like