django learn the basics - it.iitb.ac.in · advance concepts django rest api built in features orm...

43
Advance Concepts Django Rest API Django Learn the Basics Abhijit Bonik Indian Institute of Technology Bombay May 16, 2018

Upload: others

Post on 03-Sep-2019

28 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

DjangoLearn the Basics

Abhijit Bonik

Indian Institute of Technology Bombay

May 16, 2018

Page 2: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Built in features

ORM

Built in Authentication System

Template engine

Form processing

Web server for development and testing

Caching

Middleware system

An admin interface

It solves many common problems associated with Webdevelopment, such as security features, database access,sessions, template processing, URL routing,internationalization etc.

Page 3: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

MVT Framework

Model (ORM, Database)

View (functions, classes)

Template (HTML)

Page 4: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Execution Flow

Figure: Execution Flow

Page 5: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Creating a Django project

Command - django-admin startproject Summer Internship

Directory Structure

Summer_Internship/

manage.py

Summer_Internship/

__init__.py

settings.py

urls.py

wsgi.py

Page 6: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Creating a module or app

Command - python3 manage.py startapp interns

Directory Structure

Summer_Internship/

manage.py

Summer_Internship/

interns/

__init__.py

admin.py

apps.py

migrations/

__init__.py

models.py

tests.py

views.py

Page 7: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Models

You will define all your models in models.py file for the respectivemodule.

class Interns(models.Model):

name = models.CharField(max_length=100)

address = models.TextField()

created_at = models.DateTimeField(auto_now_add=True)

institute = models.CharField(max_length=100)

Note: Every class you define in models.py file will create a table inthe database.

Page 8: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Views

Views are nothing but functions defined in view.py file of yourmodule.

from .models import Interns

def all_intern_details(request):

interns=Interns.objects.all()

return render(request,’interns.html’,{’interns’:interns})

Note: Each view function accepts an http request , does allprocessing, make a call to the database(models) if needed andgives a http response.

Page 9: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

URLs

The urls are defined in the variable ’urlpatterns’

from interns import views

urlpatterns = [

url(r’^interns_details/$’, views.all_interns_details,

name = ’interns_details’),

]

Django search for all urls you enter in the browser in this variable.

Page 10: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Template

The template file will display the value of variables or data it hasreceived from the view function. Following is a interns.html file -

{% extends ’base.html’ %}

{% for intern in interns %}

{{ intern.name }}

{{intern.address}}

{{intern.institute}}

{% endfor %}

Page 11: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Get info of a single intern

from .models import Interns

def intern_profile(request, pk):

intern=Interns.objects.get(pk=pk)

return render(request, ’intern_profile.html’,

{‘intern’:intern})

Page 12: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Get info of a single intern

from .models import Interns

def intern_profile(request, pk):

intern=Interns.objects.get(pk=pk)

return render(request, ’intern_profile.html’,

{‘intern’:intern})

Page 13: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

URLs

The urls are defined in the variable ’urlpatterns’

from interns import views

urlpatterns = [

url(r’^interns_details/$’, views.all_interns_details,

name = ’interns_details’),

url(r’^intern_profile/(?P<pk>\d*)/$’,

views.intern_profile, name = ‘intern_profile’),

]

Django search for all urls you enter in the browser in this variable.

Page 14: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Display Intern details

{% extends ’base.html’ %}

<a href="{% url ‘intern_profile’ intern.pk %}">

{{ intern.name }} </a>

<p> {{intern.address}} </p>

<p> {{intern.institute}} </p>

Page 15: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Handling Forms in Django

Three way of creating forms in Django.

Using html tags

Using Django Form API

Using Django Model Form API

Page 16: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Using HTML forms- create intern.html

Create an intern details form–

<form method="post">

{% csrf_token %}

<label for="id_name">Name</label>

<input type="text" class="form-control" id="id_subject" name="name">

<label for="id_address">Address</label>

<textarea class="form-control" id="id_address" name="address" rows="5">

</textarea>

<label for="id_name">Institute</label>

<input type="text" class="form-control" id="id_institute"

name="institute">

<button type="submit" class="btn btn-success">Post</button>

</form>

Page 17: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Function for creating an intern

from .models import Intern

def create_intern(request):

if request.method == ’POST’:

name=request.POST[’name’]

address = request.POST[’address’]

institute = request.POST[‘institute’]

intern = Intern.objects.create(

name=name,

address=address,

institute=institute

)

return redirect(’intern_profile’, pk=intern.pk)

else:

return render(request, ‘create_intern.html’)

Page 18: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Forms API

Django two types of built in forms:

forms.Form

forms.ModelForm

Page 19: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Using form.Form Api - forms.py

from django import forms

class NewInternForm(forms.Form):

name = forms.CharField(label=’name’, max_length=100)

address = forms.CharField(label=’address’,

widget=forms.Textarea())

institute = forms.CharField(label=’institute’)

Page 20: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Validate with form api

from .models import Intern, Institute

from .forms import NewInternForm

def create_intern(request):

if request.method == ’POST’:

form = NewInternForm(request.POST)

if form.is_valid():

name=form.cleaned_data.get(’name’),

address = form.cleaned_data.get(’address’),

institute = form.cleaned_data.get(’institute’),

intern = Intern.objects.create(

name=name,

address=address,

institute=institute

)

return redirect(’intern_profile’, pk=intern.pk)

else:

form = NewTopicForm()

return render(request, ’create_intern.html’, {form’: form})

Page 21: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Display form using Form Apis

{% if user.is_authenticated %}

<form method="post">

{% csrf_token %}

{{ form.as_p }}

<button type="submit" class="btn btn-success">Post</button>

</form>

{% endif %}

The form have three rendering options: form.as table,form.as ul, and form.as p

Page 22: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

ModelForm API

from .models import Interns

class NewInternForm(forms.ModelForm):

class Meta:

model = Interns

fields = [’name’, ’address’, ‘institute’]

Page 23: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

View function

if request.method == ’POST’:

form = NewInternForm(request.POST)

if form.is_valid():

intern = form.save()

return redirect("intern_profile", pk=intern.pk)

else:

form = NewInternForm()

return render(request, ’create_intern.html’, {’form’: form})

Page 24: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Advance Concepts

Page 25: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Class based views

It extends the View class.

The requests are handled inside class methods named afterthe HTTP methods- get, post, put, head, etc

So no conditional check is required

Two types -

1 Class-Based Views (CBV)2 Generic Class-Based Views (GCBV)

Page 26: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Create interns using- Class based views

from django.views.generic import View

from .forms import NewInternForm

class CreateInternView(View):

def post(self, request):

form = NewInternForm(request.POST)

if form.is_valid():

intern = form.save()

return redirect(’intern_profile’, intern.pk)

return render(request, ’create_intern.html’, {’form’: form})

def get(self, request):

form = NewInternForm()

return render(request, ’create_intern.html’, {’form’: form})

Page 27: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Add more class methods

def render(self, request):

return render(request, ’create_intern.html’,

{’form’: self.form})

def post(self, request):

self.form = NewInternForm(request.POST)

if self.form.is_valid():

intern = self.form.save()

return redirect(’intern_profile’, intern.pk)

return self.render(request)

def get(self, request):

self.form = NewInternForm()

return self.render(request)

Page 28: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Urls for class based views

urlpatterns = [

url(r’^create_interns/$’, views.CreateInternView.as_view(),

name=’create_intern’),

]

Page 29: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Generic Class based Views (GCBV)

They can speed up development. Following are some mostly usedGCBV

CreateView,

DetailView

DeleteView

FormView

UpdateView

ListView.

Page 30: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Generic Class based views - List View

from django.views.generic import ListView

from .models import Interns

class BoardListView(ListView):

model = Interns

context_object_name = interns

template_name = interns.html’

Page 31: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

CreateView

from django.views.generic import ListView

from .models import Interns

from .forms import NewInternForm

class CreateInternView(CreateView):

model = Interns

form_class = NewInternForm

success_url = reverse_lazy(’get_intern_details’,

kwargs={’pk’: self.object.id})

template_name = ‘create_interns.html’

Page 32: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

DetailView

class InternProfileView(DetailView):

model = Intern

template_name = "intern_profile.html"

context_object_name = "intern"

This class will fetch the primary key from the url and return anobject of a single intern matching the key

Page 33: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Django Rest API

Page 34: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Rest API

Any application that can understand internet’s HypertextTransfer Protocol (HTTP) can communicate with each other.

REST is also a language-independent architectural style.

RESTful web services can be written using any language -Python, Java, .NET, etc.

We will use Django Rest Framework, a module of Django toimplement Rest APIs.

Page 35: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Django Rest Framework

It has a Web browsable API

Built in authentication scheme such as TokenAuthentication,BasicAuthentication, Sessionbased

Serialization that supports both ORM and non-ORM datasources.

Page 36: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Serializers

Serializers allow complex data such as querysets and modelinstances to be converted to native Python data types thatcan then be easily rendered into JSON, XML or other content types.

from rest_framework import serializers

from .models import Interns

class UserSerializer(serializers.HyperlinkedModelSerializer):

class Meta:

model = Interns

fields = (’pk’, ’name’, ’address’, ’institute’)

Page 37: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Class based Viewsets

from rest_framework import viewsets

from tutorial.quickstart.serializers import InternSerializer

from .models import Interns

class InternViewSet(viewsets.ModelViewSet):

queryset = Interns.objects.all().order_by(’-name’)

serializer_class = InternSerializer

Urls – Link your viewsets to url

urlpatterns = [

url(r’^api/internapi/$’, views.InternViewSet.as_view(), name=’intern_api’),

]

Page 38: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

APIs using Django function based views

def intern_api(request):

if request.method == ’GET’:

interns = Interns.objects.all()

serializer = InternSerializer(interns, many=True)

return JsonResponse(serializer.data, safe=False)

elif request.method == ’POST’:

data = JSONParser().parse(request)

serializer = InternSerializer(data=data)

if serializer.is_valid():

serializer.save()

return JsonResponse(serializer.data, status=201)

return JsonResponse(serializer.errors, status=400)

Page 39: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Using Rest Framework ‘api view’ wrappers

@api_view([’GET’, ’POST’])

def intern_api(request):

if request.method == ’GET’:

interns = Interns.objects.all()

serializer = InternSerializer(interns, many=True)

return Response(serializer.data)

elif request.method == ’POST’:

serializer = InternSerializer(data=request.data)

if serializer.is_valid():

serializer.save()

return Response(serializer.data,

status=status.HTTP_201_CREATED)

return Response(serializer.errors,

status=status.HTTP_400_BAD_REQUEST)

Page 40: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Where we are now

What are models, views, templates, urls.

What are Form APIs

What is Class Based and Generic Class Based Views

What is Rest APIs

How to create a Rest API Using DRF

What are Serializers and Viewsets

Page 41: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

For installation and other details refer to

https://github.com/fresearchgroup/Collaboration-System

https://fresearchgroup.github.io/docs-collaboration-system/

https://github.com/abhisgithub/django-nginx-installation-script

Page 42: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

Page 43: Django Learn the Basics - it.iitb.ac.in · Advance Concepts Django Rest API Built in features ORM Built in Authentication System Template engine Form processing Web server for development

Advance Concepts Django Rest API

For installation and other details refer to

Thank You!