How To Integrate JWT in Python Django REST Framework?

Django REST Framework is one of the most popular Django web frameworks that has been used to build many successful projects. It provides a simple and easy-to-use interface for designing APIs and JSON web services, which is quite popular among startups. When working with the REST framework in Python, there are a few ways you can implement the JSON Web Token (JWT) type of authentication.

What Is JWT?

JWT is an encoded JSON string that is passed in headers to authenticate requests. It is usually obtained by hashing JSON data with a secret key. This means that the server doesn’t need to query the database every time to retrieve the user associated with a given token.

How JSON Web Tokens Work

When a user successfully logs in using their credentials, a JSON Web Token is obtained and saved in local storage. Whenever the user wants to access a protected URL, the token is sent in the header of the request. The server then checks for a valid JWT in the Authorization header, and if found, the user will be allowed access.

A typical content header will look like this:

[code language=”css”]
Authorization: Bearer gdh676hghu
[/code]

Work Flow of JWT

JWT Diagram

Advantages of JWT

  • No Session to Manage (stateless)
  • Portable
  • No Cookies Required, So It’s Very Mobile Friendly
  • Good Performance
  • JWT helps in securing APIs

Django REST Framework

Django REST framework (DRF) is an open source, mature and well supported Python/Django library that aims at building sophisticated web APIs. It is a flexible and fully-featured toolkit with modular and customizable architecture that makes possible development of both simple, turn-key API endpoints and complicated REST constructs.

Main Advantages of Django REST framework

  • Simplicity, flexibility, quality, and test coverage of source code.
  • Powerful serialization engine compatible with both ORM and non-ORM data sources.
  • Pluggable and easy to customize emitters, parsers, validators and authenticators.
  • Generic classes for CRUD operations.
  • Clean, simple, views for Resources, using Django’s new class based views.
  • Support for Model Resources with out-of-the-box default implementations and input validation (optional support for forms as input validation).
  • HTTP response handling, content type negotiation using HTTP Accept headers.

Implementing JWT in Django REST Framework

Django REST Framework comes with various default Authentication Classes. Basic Authentication, Session Authentication, and Token Authentication to name a few.

Token-based authentication is the most preferred method of implementing authentication in modern APIs. In this mechanism, the server generates a token for the authenticated user and the user has to send the token along with all the HTTP requests to identify themselves.

Install DRF and Django-rest-framework-jwt using pip

[code language=”css”]
pip install djangorestframework

pip install djangorestframework-jwt

pip install django
[/code]

In order to use JWT, we need to configure Django-rest-framework permissions to accept JSON Web Tokens.

In the settings.py file, add the following configurations:

[code language=”css”]
REST_FRAMEWORK = {

‘DEFAULT_AUTHENTICATION_CLASSES’: (

‘rest_framework_jwt.authentication.JSONWebTokenAuthentication’,

),

}
[/code]

Now add JWT API endpoint to the settings.py file as below

[code language=”css”]
from django.urls import path, include

from rest_framework_simplejwt import views as jwt_views

 

urlpatterns = [

path(‘api/token/’,

jwt_views.TokenObtainPairView.as_view(),

name =’token_obtain_pair’),

path(‘api/token/refresh/’,

jwt_views.TokenRefreshView.as_view(),

name =’token_refresh’),

path(”, include(‘app.urls’)),

]
[/code]

The above endpoint will be used to generate and refresh the JWT token on every API call.

We will make use of the Django-REST Framework JWT Python module we installed at the beginning of this tutorial. It adds JWT authentication support for Django Rest Framework apps.

Let’s define some configuration parameters for our tokens and how they are generated in the settings.py file.

[code language=”css”]
import datetime

JWT_AUTH = {

 

‘JWT_VERIFY’: True,

‘JWT_VERIFY_EXPIRATION’: True,

‘JWT_EXPIRATION_DELTA’: datetime.timedelta(seconds=3000),

‘JWT_AUTH_HEADER_PREFIX’: ‘Bearer’,

}
[/code]

  • JWT_VERIFY: It will raise a jwt. Decode Error if the secret is wrong.
  • JWT_VERIFY_EXPIRATION: Sets the expiration to True, meaning Tokens will expire after a period of time. The default time is five minutes.
  • JWT_AUTH_HEADER_PREFIX: The Authorization header value prefix that is required to be sent together with the token. We have set it as Bearer, and the default is JWT

Now you can use the JWT payload in your authentication method. Go to the views.py file and add the following code

[code language=”css”]
def authenticate_user(request):

email = request.data[’email’]

password = request.data[‘password’]

 

user = User.objects.get(email=email, password=password)

if user:

payload = jwt_payload_handler(user)

token = jwt.encode(payload, settings.SECRET_KEY)

user_details = {}

user_details[‘name’] = "%s %s" % ( user.first_name, user.last_name)

user_details[‘token’] = token

user_logged_in.send(sender=user.__class__,request=request, user=user)

return Response(user_details, status=status.HTTP_200_OK)

[/code]

Every time the user wants to make an API request, they have to send the token in auth Headers in order to authenticate the request. You can test the API endpoint using Postman or any other API testing tools.

You can check the JWT token by using any of the PI test tools like Postman. Below is the screenshot of using postman to call the JWT API

JWTYou can find out the source code for the demo project here at Github

Conclusion

JWTs are the best way to securely exchange information between front-end and backend because they can be signed, which means we can be sure that the senders are who they say they are. The structure of a JWT allows us to verify that the content hasn’t been tampered with.

JWT makes the process of user authentication on the web much easier, providing a simpler way to exchange information between a server and a client.

The Django REST Framework is a RESTful framework for developing Django applications. It provides a high-level view on how to develop RESTful web services in Django.

How Good Is Python For Web Application Development?

We all are aware about the usage of smartphones in our daily life. According to the journal of accountancy, we check our phones on an average for  86 times a day, at least for the millennial, for the rest of the population it varies. It is only because we are very much addicted to it.

Planning to develop your mobile application or website using python, but don’t have the idea about Which programming language is used to develop the application

Don’t worry we are here to help you.

We will guide you to choose the best language to use in order to develop your application.

App development using Python, will help you to develop an application that is adaptable, ubiquitous and reliable.

Python is a general coding language which implies not like HTML, CSS, and JavaScript but it may be used for different varieties of programming and package development besides web development.

Python is an object oriented, interpreted and high level programming language. It is a candid and easy to learn programming language which emphasizes the readability and reduces the application maintenance price.

With Python

It consists wide selection of modules and packages that permits program modularity and code employ.

Python Language(Source: Zibtek)

  • Python is an object oriented, high-level programming language, which implies it consist of words and phrases intelligible to humans. To translate this application-oriented language into machine code, Python uses an interpreter. The work of an interpreter is to convert the source code into code understood by all computers. As an interpreted language, Python uses memory with efficiency, that is simple to rectify, and permits developers to perform advanced tasks in an exceedingly few steps and edit code quickly.
  • Most up-to-date programming languages, together with Python, are considered object-oriented. The thought behind object-oriented languages is that the program is split into freelance objects that communicate between themselves. This gorgeous a lot of appears like a set of mini-programs.

Never miss an update for us. Join 10,000+ marketers and leaders.

  • Python is a dynamic language. This implies that developers ought not to declare variable sorts. Python verifies sorts and errors at runtime (when the program is launched), however not throughout compilation (when ASCII text file is regenerate to machine code). This ends up in less code, quicker development, and bigger flexibility and resilience.
  • Develop Prototypes:As the Python web programming language is easy to access. This ensures that the program will work properly. You can create prototypes, so you can easily test the code with the use of python.
  • Python is known as an easily readable language. Its info is visually tidy, and it usually uses English keywords wherever different languages use punctuation. Unlike several different languages, it doesn’t use wavy brackets to delimit blocks, and semicolons once statements. Basic ideas of Python Indentation Many of the programming languages use brackets to outline their code block, however Python’s interpreter uses indentation method to outline the code blocks.

Why Python is Popular?

Above all python is one of the most popular programming language from long decades because of its high scalability and productive than other object oriented programming languages like C++ and Java.

Python Popularity(Source: Directlinkdev)

According to a review by stack overflow’s 2018 developer it was discovered that Python is the most adopted framework. More than 122,864 sites online are developed using this android language.

Python Use(Source – directlinedev.com)

The code syntaxes are very simple and easy to learn by the developers. Also it uses English commands that makes it more efficient and easier to understand.

For example, take a look at the code you’d use to print the text “Hello World” on your screen using the programming language Java:

[code language=”css”]

Class hello world {

Public static void main (String [] args) {

System.out.println ("Hello World")

}

}

[/code]

That’s a lot of code for such a simple function.

Now take a look at the same exercise written in Python code:

Print (“Hello World”)

Like other programming languages Python also provides a way to handle the error exception using try, except syntaxes

Try:

[code language=”css”]

a = int (input ("Enter a:"))

b = int (input ("Enter b:"))

c = a/b

[/code]

Print(c)

Except:

Print (“Can’t divide with zero”)

# Example 2

try:

#this will throw an exception if the file doesn’t exist.

Basic Concepts of Python

1. Indentation

Many of the programming languages use brackets to define their code block, but Python’s interpreter uses indentation process to define the code blocks. So the developers have to be very careful with the white spaces in their code base which can break the application.

2. Semicolons

Python programming language is not using semicolon to end the line. A new code line is enough to detect a new code syntax.

3. Variables

Python uses variables to store data such as string, number and other information’s for manipulation work.

4. Operators

Operators are used in values or variables to perform certain logic and mathematical operations

Python Framework:

Also, Python is in extreme demand in diverse industries. Like the database, machine learning, databases, design, data analysis, web page readability/testing, application development using Python language.

The platform is mostly utilized for data analysis, DevOps tasks and web development.

If you are choosing Python in web development, then you are coming across the variety of Python frameworks that empower the developers to get more with less coding. Some of these frameworks are:

  • Django: It has got it’s first place because of its nature being an open-source Python Platform. This technology is effective to develop complex data driven sites. This platform is advanced and has many matured attributes that includes templates, libraries, and API which support the development of scalable web development in python projects.
  •  Turbo gears:Turbo Gear is a top web application development platform. It comprises web server Gateway interface  elements, includes SQL Alchemy, Webob, Repoze and more. Like Ruby on Rails, TurbpoGears works well with MVC architecture which supports rapid web application development using Python.
  • Numpy: Numpy numeric python is the library which assists to perform logical and scientific activity on arrays. The library is involved with multidimensional arrays of objects. It also consists of several collections of routines used for processing the arrays.
  • Panda: It is a BSZ authorized , Open Source Python library that provides many simple to use data structures along with the data analytics tools to the Python developers. These technologies are mostly used for commercial and academic domains along with analytics, finance, economic and statistics, etc.

Why is Python good for web development?

Python continues to be one of the most popular languages from many years. According to TIOBE, Python is ranked among the top programming languages. Built With states that there are almost a million websites that use Python.

Programing Language(Source: tiobe.com)

Python is valued equally among startups such as Finance Strategists, mid-size companies such as EP Wealth, blue chip companies like Google, Quora, Netflix, and Spotify, and government organizations like NASA. Yet few people know why Python is one of the top programming languages for website development. So why has it gained great popularity and interest among startup founders?

Here’s what the Python Software Foundation says:

1. Powerful and quick

Python is powerful, and it may be used for virtually something. Initial and foremost, it may be used for all the world as a result of it offers several options by default, with normal libraries that cowl nearly any programming task.

2. Plays well with others

Python is purposeful enough to interface with code written in different programming languages. You’ll imbed your Python project into frameworks of various languages, and the other way around. This implies that you just will produce comes that blend Python with different programming languages (for example, C++) and acquire the most effective of 2 worlds.

3. Runs everywhere

Python is available for almost any operating system, including UNIX-based operating systems, Windows, mac OS, iOS, and Android. It also runs on various platforms, including IBM, AIX, Solaris, and VMS.

4. Friendly and easy to learn

Python is considered a highly effective way of coding because of its simple syntax and readability. Python is an easy-to-learn language, and thus there’s a large enough talent pool.

5. Open Source

Python is an open-source language administered and supported by an independent nonprofit foundation: the Python Software Foundation. One of the major advantages of open-source software is that it’s free to use, modify, and distribute.

Who uses Python?

Python is a multi-purpose language and can be used to build practically anything. Companies around the world use Python for artificial intelligence and machine learning, website development, scientific and numerical computing, gaming, and many other uses.

As for artificial intelligence, Python stands above other programming languages and is considered the best programming language for AI-powered applications.

Companies like Google, Facebook, and Dropbox tare using Python in one form or another for its flexibility, scalability, performance, and rapid development.

Python(Source- directlinedev.com)

Alternatives to Python

Python is often compared to other programming languages. Below, we briefly compare the most common alternatives to Python: Java, PHP, and Ruby.

Languages

FAQS

What makes python good?

Python is a high level programming language comes with a variety of standard library that covers many areas such as string processing, internet protocols and operating system interfaces.

Should I use Python 2 or Python 3?

Python has many versions but the main comparison is Python 2 and Python 3. Initially Python 3 was released December 2008 in order to rectify some fundamental flaws from Python 2.

The feature of Python 3 was “reduce feature duplication by removing old ways of doing things.”

What are the best Python IDEs?

There are many IDEs available in market but we are looking for an IDE that is dedicated towards Python development work. Some of the popular IDEs names are as below

  • Eclipse + PyDev
  • Sublime Text
  • Atom
  • PyCharm
  • Spyder

I’ve worked with the team at AndolaSoft on multiple websites. They are professional, responsive, & easy to work with. I’ve had great experiences & would recommend their services to anyone.

Ruthie Miller, Sr. Mktg. Specialist

Salesforce, Houston, Texas

LEARN MORE

Conclusion:

Web application development using python is more demanding in the present time because of its simplicity. Python web development has a very low entry threshold, but it is an extremely powerful programming language with numerous capabilities.

You can safely use it for development because of its highly active community and built-in frameworks. With Python, you can reduce the bounce rates of your website and speed up the page loading times. It makes your website loading time faster which helps the visitors to feel they are in a modern website.

Are you looking for Python development services? We have a team of experienced Python web application developer who can help you.

Get in touch with Andolasoft Python developers for free consultation.

Rails Or Django – Which One To Choose?

Rails or Django - which one to choose?

Python and Ruby are the most popular dynamic programming languages. Developers are using these two languages for high-level application development. Python and Ruby are popular among web developers because of their rapid development cycle.

Here, I have discussed the most important difference between Python and Ruby:

Philosophy

Python has been designed to emphasize the programmer’s productivity and code readability. The philosophy of Python requires almost everything explicitly defined by a programmer, whereas Ruby allows programmers to reuse the in-built components in development.

The philosophy behind Ruby is that programmers should have the flexibility and privilege to write concise and compact code.

Functional Programming

Both Rails and Django use object-relational mapping to link the application to the underlying database. In Django, the developer is required to explicitly specify each attribute of every class.

But, In rails, all module attributes are not defined in the class definition. A developer can retrieve all the information from the database based on the class name.

In Rails database migrations is very easy and in-built compared to Django, as it uses third party library like South.

Convention over Configuration

Ruby on Rails defines certain features that make web programming more effective and user-friendly. Convention over configuration (CoC) is one of the important features of Rails.

“Convention over Configuration” means a developer only needs to specify unconventional aspects of the application. There are some predefined layout and sensible defaults available in rails projects.

All components such as models, controllers, and static CSS and JavaScript files are located in standard sub-directories and you just need to drop your implementation files into those directories.

CoC saves a lot of time of developers because in rails you don’t need to write the same code again and again.

While in Django, you have to specify the path where the component files are located. So the development cycles in Rails are shorter as compared to it’s counterparts.

Model-View-Controller and REST

Ruby on Rails is unique because it supports the REST protocol. It helps you to organize your application. In Rails, all model objects are accessed and handled in a uniform manner using the standard HTTP verbs like getting, PUT, DELETE, and POST.

CSS, JavaScript and images

Rails have an in-built asset pipeline. Rails’ asset pipeline is having feature of minifying, concatenating and compressing JavaScript and CSS files. Not only that, it also supports other languages such as Coffeescript, Sass and ERB.

Django’s support of assets it very amateurish compared to Rails and leaves everything to the developer. Django offers static files, which basically collects all static files from each application to a single location.

URL mapping

Both Rails and Django allow for the use of regular expressions to customize the mapping of URLs to controller actions. Both are flexible enough to allow you to create pretty much any mapping scheme you wish.
But, Rails does automatic URL mapping based on the class and function names within controllers by default.

Testing

Testing is very easy in Rails and there’s a much stronger emphasis on it in Rails than in Django.

Popularity

Python is generally more widely used than Ruby. Due to the rising popularity of the Ruby on Rails Web application development framework, Ruby’s popularity to has seen rapid growth.

Both Rails and Django are effective web frameworks powered by efficient programming languages. However, Rails is the best platform for rapid web app development.

Andolasoft offers quality rails development service. We specialize in developing database-driven web applications in an efficient and hassle-free way.

Recommended Blog: Steps to add ‘Elasticsearch’ to Rails App

Have something to add to this topic? Share it in the comments