{"id":501,"date":"2021-09-27T09:38:49","date_gmt":"2021-09-27T09:38:49","guid":{"rendered":"https:\/\/externlabs.com\/blogs\/?p=501"},"modified":"2023-04-13T18:40:06","modified_gmt":"2023-04-13T13:10:06","slug":"what-is-django-rest-framework","status":"publish","type":"post","link":"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/","title":{"rendered":"What is Django Rest Framework?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Django Rest Framework lets you create RESTful APIs: A way to transfer information between an interface and a database in a simple way.<\/p><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_63 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >Page Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Steps_to_start_with_Django_rest_framework\" title=\"Steps to start with Django rest framework\">Steps to start with Django rest framework<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Setting_Up_environment\" title=\"Setting Up environment:\">Setting Up environment:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Install_Django_and_Django_Rest_Framework\" title=\"Install Django and Django Rest Framework:\">Install Django and Django Rest Framework:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Run_Migrations\" title=\"Run Migrations:\">Run Migrations:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Create_SuperUserAdmin\" title=\"Create SuperUser(Admin):\">Create SuperUser(Admin):<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Start_the_local_development_server\" title=\"Start the local development server:\">Start the local development server:<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Why_choose_Django_Rest_Framework_for_Development\" title=\"Why choose Django Rest Framework for Development?\">Why choose Django Rest Framework for Development?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Django_Rest_Framework_Authentication\" title=\"Django Rest Framework Authentication\">Django Rest Framework Authentication<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/externlabs.com\/blogs\/what-is-django-rest-framework\/#Django_Rest_Framework_APIView\" title=\"Django Rest Framework APIView\">Django Rest Framework APIView<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<ol class=\"wp-block-list\">\n<li>Django REST framework (DRF) is an open-source, mature, and well-supported Python\/Django library.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>It aims at building web Rest APIs.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>The Django REST framework contains a wide set of out-of-the-box features, but the core view class is very simple and the framework in general is easy to use.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"700\" height=\"466\" src=\"https:\/\/externlabs.com\/blogs\/wp-content\/uploads\/2021\/10\/Django-Rest-Framework.jpg\" alt=\"Django rest framework\" class=\"lazyload_inited wp-image-645\" srcset=\"https:\/\/externlabs.com\/blogs\/wp-content\/uploads\/2021\/10\/Django-Rest-Framework.jpg 700w, https:\/\/externlabs.com\/blogs\/wp-content\/uploads\/2021\/10\/Django-Rest-Framework-300x200.jpg 300w, https:\/\/externlabs.com\/blogs\/wp-content\/uploads\/2021\/10\/Django-Rest-Framework-696x463.jpg 696w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><span class=\"ez-toc-section\" id=\"Steps_to_start_with_Django_rest_framework\"><\/span>Steps to start with Django rest framework<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><span class=\"ez-toc-section\" id=\"Setting_Up_environment\"><\/span>Setting Up environment:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">python3 -m venv env<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">source env\/bin\/activate<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">(On Windows, run source env\\Scripts\\activate instead.)<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><span class=\"ez-toc-section\" id=\"Install_Django_and_Django_Rest_Framework\"><\/span>Install Django and Django Rest Framework:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">django-admin start project blog<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">cd blog<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">django-admin startapp api<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><span class=\"ez-toc-section\" id=\"Run_Migrations\"><\/span>Run Migrations:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">python manage.py makemigrations<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">python manage.py migrate<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><span class=\"ez-toc-section\" id=\"Create_SuperUserAdmin\"><\/span>Create SuperUser(Admin):<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">A. python manage.py createsuperuser &#8211;email admin@example.com &#8211;username admin<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">Set up your Django REST Framework API<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">INSTALLED_APPS[<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">#code omitted for brevity<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2018rest_framework\u2019,<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2018api.apps.ApiConfig\u2019,<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">]<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><span class=\"ez-toc-section\" id=\"Start_the_local_development_server\"><\/span>Start the local development server:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">python manage.py run server<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">These are the basic things we can do to start a Django rest framework project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_choose_Django_Rest_Framework_for_Development\"><\/span>Why choose Django Rest Framework for Development?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One of the main reasons for using the Django rest framework is that it makes serialization so easy and fast.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Here APIs play a major role, if you create <strong><em>APIs<\/em><\/strong> of the common business logic, then you just need to access those APIs using <strong>URLs<\/strong> in your different applications.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>The Django REST Framework, then, plays nicely with the Django ORM that makes handling database queries easy. With a few lines of code you can serialize your database models to REST-ful formats.<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>The main idea behind the DRF is to clearly divide a model, the generalized wire representation (e.g. JSON, XML, etc.), and set of generic Class-Based-Views that can be customized to satisfy the specific API endpoint using Serializer that describes the mapping between them.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Django_Rest_Framework_Authentication\"><\/span>Django Rest Framework Authentication<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Authentication is the mechanism of associating an incoming request with a set of identifying credentials, such as the utilizer the request emanated from, or the token that it was signed with.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The sanction and throttling policies can then utilize those credentials to determine if the request should be sanctioned<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Types of Authentication:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Basic Authentication<\/li>\n\n\n\n<li>Token-Based Authentication<\/li>\n\n\n\n<li>3rd Party Packages<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Django_Rest_Framework_APIView\"><\/span>Django Rest Framework APIView<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Django&#8217;s views are a welcome departure from the old-style views. we\u2019re migrating an existing RESTful API based on function-based views to class-based views.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are mainly 2 types of Views:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Function-based Views<\/li>\n\n\n\n<li>Class Based Views<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">We will explore different ways to engender a Django Rest Framework(DRF) API in a 3 part series:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Plain APIView<\/li>\n\n\n\n<li>Generic APIView<\/li>\n\n\n\n<li>ViewSets<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Congratulations! Now you are ready to start with the Django rest framework. After reading this you are able to set up and run a Django rest framework project. After reading this you are ready to learn the following things:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create Serializer<\/li>\n\n\n\n<li>Create Models<\/li>\n\n\n\n<li>Create Views<\/li>\n\n\n\n<li>Register Url Patterns<\/li>\n\n\n\n<li>Attach Different Rest APIs with URLs<\/li>\n\n\n\n<li>You can create API for login authentication.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Django Rest Framework lets you create RESTful APIs: A way to transfer information between an interface and a database in a simple way. Steps to start with Django rest framework Setting Up environment: python3 -m venv env source env\/bin\/activate (On Windows, run source env\\Scripts\\activate instead.) Install Django and Django Rest Framework: django-admin start project blog&hellip;<\/p>\n","protected":false},"author":2,"featured_media":645,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[43],"tags":[152],"class_list":["post-501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python-frameworks"],"_links":{"self":[{"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/posts\/501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/comments?post=501"}],"version-history":[{"count":0,"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/posts\/501\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/media\/645"}],"wp:attachment":[{"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/media?parent=501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/categories?post=501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/externlabs.com\/blogs\/wp-json\/wp\/v2\/tags?post=501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}