Django Learn The Basics - IIT Bombay

Transcription

Advance ConceptsDjango Rest APIDjangoLearn the BasicsAbhijit BonikIndian Institute of Technology BombayMay 16, 2018

Advance ConceptsDjango Rest APIBuilt in featuresORMBuilt in Authentication SystemTemplate engineForm processingWeb server for development and testingCachingMiddleware systemAn admin interfaceIt solves many common problems associated with Webdevelopment, such as security features, database access,sessions, template processing, URL routing,internationalization etc.

Advance ConceptsMVT FrameworkModel (ORM, Database)View (functions, classes)Template (HTML)Django Rest API

Advance ConceptsDjango Rest APIExecution FlowFigure: Execution Flow

Advance ConceptsCreating a Django projectCommand - django-admin startproject Summer InternshipDirectory StructureSummer Internship/manage.pySummer Internship/init .pysettings.pyurls.pywsgi.pyDjango Rest API

Advance ConceptsCreating a module or appCommand - python3 manage.py startapp internsDirectory StructureSummer Internship/manage.pySummer Internship/interns/init .pyadmin.pyapps.pymigrations/init .pymodels.pytests.pyviews.pyDjango Rest API

Advance ConceptsDjango Rest APIModelsYou 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.

Advance ConceptsDjango Rest APIViewsViews are nothing but functions defined in view.py file of yourmodule.from .models import Internsdef all intern details(request):interns Interns.objects.all()return nterns})Note: Each view function accepts an http request , does allprocessing, make a call to the database(models) if needed andgives a http response.

Advance ConceptsDjango Rest APIURLsThe urls are defined in the variable ’urlpatterns’from interns import viewsurlpatterns [url(r’ interns details/ ’, views.all interns details,name ’interns details’),]Django search for all urls you enter in the browser in this variable.

Advance ConceptsDjango Rest APITemplateThe 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 %}

Advance ConceptsGet info of a single internfrom .models import Internsdef intern profile(request, pk):intern Interns.objects.get(pk pk)return render(request, ’intern profile.html’,{‘intern’:intern})Django Rest API

Advance ConceptsGet info of a single internfrom .models import Internsdef intern profile(request, pk):intern Interns.objects.get(pk pk)return render(request, ’intern profile.html’,{‘intern’:intern})Django Rest API

Advance ConceptsDjango Rest APIURLsThe urls are defined in the variable ’urlpatterns’from interns import viewsurlpatterns [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.

Advance ConceptsDisplay Intern details{% extends ’base.html’ %} a href "{% url ‘intern profile’ intern.pk %}" {{ intern.name }} /a p {{intern.address}} /p p {{intern.institute}} /p Django Rest API

Advance ConceptsHandling Forms in DjangoThree way of creating forms in Django.Using html tagsUsing Django Form APIUsing Django Model Form APIDjango Rest API

Advance ConceptsDjango Rest APIUsing HTML forms- create intern.htmlCreate 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

Advance ConceptsDjango Rest APIFunction for creating an internfrom .models import Interndef 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’)

Advance ConceptsForms APIDjango two types of built in forms:forms.Formforms.ModelFormDjango Rest API

Advance ConceptsDjango Rest APIUsing form.Form Api - forms.pyfrom django import formsclass NewInternForm(forms.Form):name forms.CharField(label ’name’, max length 100)address forms.CharField(label ’address’,widget forms.Textarea())institute forms.CharField(label ’institute’)

Advance ConceptsDjango Rest APIValidate with form apifrom .models import Intern, Institutefrom .forms import NewInternFormdef 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})

Advance ConceptsDjango Rest APIDisplay form using Form Apis{% if user.is authenticated %} form method "post" {% csrf token %}{{ form.as p }} button type "submit" class "btn btn-success" Post /but /form {% endif %}The form have three rendering options: form.as table,form.as ul, and form.as p

Advance ConceptsModelForm APIfrom .models import Internsclass NewInternForm(forms.ModelForm):class Meta:model Internsfields [’name’, ’address’, ‘institute’]Django Rest API

Advance ConceptsDjango Rest APIView functionif 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})

Advance ConceptsDjango Rest APIAdvance Concepts

Advance ConceptsDjango Rest APIClass based viewsIt extends the View class.The requests are handled inside class methods named afterthe HTTP methods- get, post, put, head, etcSo no conditional check is requiredTwo types 12Class-Based Views (CBV)Generic Class-Based Views (GCBV)

Advance ConceptsDjango Rest APICreate interns using- Class based viewsfrom django.views.generic import Viewfrom .forms import NewInternFormclass 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})

Advance ConceptsAdd more class methodsdef 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)Django Rest API

Advance ConceptsDjango Rest APIUrls for class based viewsurlpatterns [url(r’ create interns/ ’, views.CreateInternView.as view(),name ’create intern’),]

Advance ConceptsDjango Rest APIGeneric Class based Views (GCBV)They can speed up development. Following are some mostly ateViewListView.

Advance ConceptsGeneric Class based views - List Viewfrom django.views.generic import ListViewfrom .models import Internsclass BoardListView(ListView):model Internscontext object name internstemplate name interns.html’Django Rest API

Advance ConceptsDjango Rest APICreateViewfrom django.views.generic import ListViewfrom .models import Internsfrom .forms import NewInternFormclass CreateInternView(CreateView):model Internsform class NewInternFormsuccess url reverse lazy(’get intern details’,kwargs {’pk’: self.object.id})template name ‘create interns.html’

Advance ConceptsDjango Rest APIDetailViewclass InternProfileView(DetailView):model Interntemplate 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

Advance ConceptsDjango Rest APIDjango Rest API

Advance ConceptsDjango Rest APIRest APIAny 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.

Advance ConceptsDjango Rest APIDjango Rest FrameworkIt has a Web browsable APIBuilt in authentication scheme such as TokenAuthentication,BasicAuthentication, SessionbasedSerialization that supports both ORM and non-ORM datasources.

Advance ConceptsDjango Rest APISerializersSerializers 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 serializersfrom .models import Internsclass zer):class Meta:model Internsfields (’pk’, ’name’, ’address’, ’institute’)

Advance ConceptsDjango Rest APIClass based Viewsetsfrom rest framework import viewsetsfrom tutorial.quickstart.serializers import InternSerializerfrom .models import Internsclass InternViewSet(viewsets.ModelViewSet):queryset Interns.objects.all().order by(’-name’)serializer class InternSerializerUrls – Link your viewsets to urlurlpatterns [url(r’ api/internapi/ ’, views.InternViewSet.as view(), name ’intern api’),]

Advance ConceptsDjango Rest APIAPIs using Django function based viewsdef 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)

Advance ConceptsUsing 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)Django Rest API

Advance ConceptsWhere we are nowWhat are models, views, templates, urls.What are Form APIsWhat is Class Based and Generic Class Based ViewsWhat is Rest APIsHow to create a Rest API Using DRFWhat are Serializers and ViewsetsDjango Rest API

Advance ConceptsDjango Rest APIFor installation and other details refer go-nginx-installationscript

Advance ConceptsDjango Rest API

Advance ConceptsDjango Rest APIFor installation and other details refer toThank You!

Advance Concepts Django Rest API Django Learn the Basics Abhijit Bonik Indian Institute of Technology Bombay May 16, 2018. 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