Django serialize queryset into JSON and display in template
In this article, you will learn a simple process to serialize a MySQL queryset to JSON and display it in the template using Django.
Django is a free, open-source, python-based framework. It enables fast development of any type of web application. It is secure, maintainable, portable, and scalable. The main advantages of using Django are that it has fully loaded common web development tasks, like administration, authentication, site maps, etc.
JSON (JavaScript Object Notation) is an open standard, lightweight, data-interchange format. It is easy to read and write for humans. It is used primarily to transmit data between a web application and a server. Today, it is more popular than XML.
Let's start the process by creating an empty project 'company' and application 'employee'-
(env) c:\python37\Scripts\projects>django-admin startproject company
(env) c:\python37\Scripts\projects>cd blog
(env) c:\python37\Scripts\projects\blog>django-admin startapp employee
settings.py
After creating the application, add it's name in 'settings.py', so that Django can read this-
INSTALLED_APPS = [
....
....
'latestnews',
]
It is also required to edit the database settings in 'settings.py'-
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'company',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306'
}
}
models.py
A model is a definitive source of information about your data. Suppose we have an 'employee' record in the MySQL database. The given model defines a model for 'Employee'.
from django.db import models
# Create your models here.
class Employee(models.Model):
emp_name = models.CharField(max_length=100)
email = models.CharField(max_length=100)
email = models.CharField(max_length=100)
phone = models.CharField(max_length=100)
created_date = models.DateField(max_length=100)
class Meta:
db_table = "employee"
views.py
In the 'views.py', we have imported 'serializers', 'HttpResponse', and the 'Employee' model. If you're using Python 2.6 or later, Django will use the built-in JSON module automatically.
Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can then be easily rendered into JSON, or other content types. The arguments in the serialize function are the format to serialize the data.
from django.shortcuts import render
from django.core import serializers
from django.http import HttpResponse
from .models import Employee
# Create your views here.
def displayData(request):
form = Employee()
data = Employee.objects.all()
post_list = serializers.serialize('json',
list(data),
fields=('emp_name','email','phone'))
return HttpResponse(post_list)
If you're using UTF-8 or any other non-ASCII encoding data with the JSON serializer, you must pass ensure_ascii=False as a parameter to the serialize() call. Otherwise, the output won't be encoded correctly.
urls.py
Here, we have added the path to route the page to a given link.
from django.contrib import admin
from django.urls import path
from employee import views
urlpatterns = [
path('displaydata', views.displayData),
]
When we migrate and run the application, we will get something like this-
[{"model": "employee.employee", "pk": 1, "fields": {"emp_name": "John", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it. ", "phone": "2323234543"}},
{"model": "employee.employee", "pk": 3, "fields": {"emp_name": "Priska", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it. ", "phone": "9393452387"}},
{"model": "employee.employee", "pk": 7, "fields": {"emp_name": "Alaya", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it. ", "phone": "3290349906"}},
{"model": "employee.employee", "pk": 8, "fields": {"emp_name": "Carle", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it. ", "phone": "9059098968"}},
{"model": "employee.employee", "pk": 9, "fields": {"emp_name": "Amma", "email": "This email address is being protected from spambots. You need JavaScript enabled to view it. ", "phone": "6750390948"}}]
Related Articles
Insert data in MySQL database from an HTML form using DjangoGenerate and download a CSV file in Django
Get data from MySQL in Django View with Models
How to read and write a file using Django
Django Pagination with Ajax and jQuery
Django upload image to database
Django pass variable from view to HTML template
Display image from database in Django
Python program to convert Celsius to Fahrenheit
Python send mail to multiple recipients using SMTP server
How to generate QR Code in Python using PyQRCode
Python programs to check Palindrome strings and numbers
CRUD operations in Python using MYSQL Connector
Fibonacci Series Program in Python
Python File Handler - Create, Read, Write, Access, Lock File
Python convert XML to JSON
Python convert xml to dict
Python convert dict to xml