Integrate Django with MongoDB
Learn how to integrate Django with MongoDB
This page explains how to integrate
Django with MongoDB, two powerful and technologies used in many applications and production-ready projects.
The source code
is saved on GitHub for later reference and support.
- 👉 Integrate Django & Mongo -
sample project
- 🚀 Free Support via Email & Discord
✅ Introduction​
This section presents more insights regarding MongoDB
and the power features compared to a Relational Database
like MySql or PostgreSQL.
What is MongoDB​
MongoDB
is an open-source, document-oriented NoSQL database that was designed for scalability and high availability.
MongoDB stores data in JSON-like documents, which makes it easy for developers to work with data because it does not require a fixed schema.
This means you can store data without having to define a strict structure, which is different from traditional SQL databases.
MongoDB supports CRUD (Create, Read, Update, Delete) operations, ad-hoc queries, and indexing, making it an excellent choice for modern web and mobile applications. It is widely used across various industries because of its flexibility, scalability, and fast performance.
MongoDB vs Relational DBMS​
Data Model
Relational databases use a tabular data model, where data is organized into tables with columns and rows. MongoDB uses a document-based data model, where data is stored as documents that can have varying structures and are typically organized in collections.
Storage Architecture
Relational Databases
use a fixed schema to enforce data consistency and use ACID transactions to ensure data integrity.
The acronym ACID refers to the four key properties of a transaction: atomicity, consistency, isolation, and durability
MongoDB
uses a flexible schema that allows for faster development and easier data evolution.
Query Language
Relational Databases use SQL (Structured Query Language) to query data, which is a declarative language that allows users to specify what data they want to retrieve.
MongoDB
uses a query language called the MongoDB Query Language (MQL), which is a JSON-based language that allows for complex queries of document-based data.
Use cases
Relational databases are well-suited for transactional systems, such as online banking or e-commerce applications, where data consistency and integrity are critical.
MongoDB
is better suited for use cases where data is less structured and more varied, such as social media or content management systems, where the flexibility of the document model allows for faster development and easier data evolution.
✅ Install MongoDB​
For this tutorial, you need MongoDB installed on your device to get started. To install MongoDB follow the links below and follow the steps outlined to get it done.
Alternatively, use the Community Version Installer, under MongoDB Community Server Download
,
using the dropdown menu select your platform and installation package. This provides a graphical user interface for the installation.
- On Windows, tick the box
Install MongoDB as a Service
, this ensures MongoB is started automatically. - On Linux, after installation is complete, run the following commands
$ sudo service mongod start
// OR
$ sudo systemctl start mongod
✅ MongoDB shell​
Mongosh
, the MongoDB shell is used to interact with the MongoDB server from the terminal. For Linux, it is installed with the MongoDB server.
For Windows mongosh
is not installed with the MongoDB server, and needs to be installed from this location:
- Mongosh download
- Under
MongoDB Shell Download
using the dropdown menu, select the preferred platform and installation package. - After the download is complete, double-click the file and follow the instructions to install the MongoDB shell
- Under
To use mongosh
with Windows, you need to add it to PATH. follow the instructions here to add mongosh
to PATH.
Once installation is complete, run the command below to ensure mongosh
was installed correctly.
$ mongosh
...
test> // mongosh cli
test> exit() // exits mongosh
This shows that mongosh
has successfully connected to the MongoDB server. Now you are ready to start development with MongoDB installed on your device.
✅ Create a Django
Project​
From the terminal run the following commands to create a new folder, change the directory into the new folder and create a new virtual environment
$ mkdir django-mongo-integration
$ cd django-mongo-integration
$ virtualenv venv
The command below activates the virtual environment
For Linux/Mac
:
$ source env/bin/activate
(venv) $ # ready for commands
For Windows
:
$ env\Scripts\activate
(venv) $ # ready for commands
Now that the virtual environment is activated, we can start installing the packages needed. Execute the following commands on your terminal to install Django and create a new Django project.
(venv) $ pip install django
(venv) $ django-admin startproject core .
The project is created in the current directory because of .
added to the command.
Add dependencies for MongoDB
​
Django was built to integrate seamlessly with Relational Databases.
To use MongoDB with Django and still leverage features like the database modeling, admin panel and so on, we will be needing a package called Djongo
.
The proceeding steps will help us install and configure our Django project to use Djongo
.
- Run the command below to install Djongo
(venv) $ pip install pymongo
(venv) $ pip install djongo
Update Configuration for MongoDB
​
Open core/settings.py
and make the following changes to allow Django uses djongo
as the database engine.
# core/settings.py
...
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'your-db-name',
}
}
...
Create a Superuser​
Before creating a superuser, we need to apply the default database migration. Run the command below to apply database migration and then create a superuser
(venv) $ python manage.py makemigrations
(venv) $ python manage.py migrate
(venv) $ python manage.py createsuperuser
At this point, the our MongoDB database should be provisioned with the new tables, and also you would have created a superuser
.
Now you can start the application and visit the admin panel using the superuser details entered earlier.
✅ Checking the information​
just to double check the set up, we can access the admin
section (reserved for superusers) or use the Django CLI to inspect the information.
Accessing the ADMIN
Section​
Run the application using the command below
(venv) $ python manage.py runserver
When the Django server starts running, open your browser and visit http://127.0.0.1:8000/admin
.
This is the route to the admin section. Once you log in you will see the admin panel, which lets you perform several actions, including adding users, deleting users, and assigning and removing roles.
Visualizing the data in MongoDB
​
To see the data added to your database, open your terminal and run the following command
Start up the MongoDB Shell
using the commandmongosh
$ mongosh <db_name> # replace db_name with the database name registered with the database engine
db_name> // shows you MongoDB shell has started
The command below will show you all the collections created when we made the database migration.
db_name> show tables
__schema__
auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session
db_name>
List all the users created
db_name> db.auth_user.find()
[
{
_id: ObjectId("643f1d48e846350f2ed32428"),
id: 1,
password: 'pbkdf2_sha256$************************************',
last_login: ISODate("2023-04-19T08:50:31.196Z"),
is_superuser: true,
username: 'admin',
first_name: '',
last_name: '',
email: 'admin@admin.com',
is_staff: true,
is_active: true,
date_joined: ISODate("2023-04-18T22:44:23.958Z")
}
]
db_name>
This command will return a list of all the users registered. For now, we have only created the superuser, hence we have only one record in the database.
✅ Styling the Project​
This section explains how to style the project with a an open-source theme that covers the admin section but also the rest of the website.
The theme to be added is the Django Soft Dashboard, a modern Bootstrap 5 Design from Creative-Tim, migrated to Django.
The proceeding steps will guide you in integrating this theme with your Django project.
Install the theme
(venv) $ pip install django-admin-soft-dashboard
Update Settings
After installation, we need to make changes to our project files to allow the project to recognize and use the theme. Open the file core/settings.py
and make the following changes.
# core/settings.py
# ... (truncated content)
INSTALLED_APPS = [
'admin_soft.apps.AdminSoftDashboardConfig', # <-- New
'django.contrib.admin',
...
]
# ... (truncated content)
LOGIN_REDIRECT_URL = '/'
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# ... (truncated content)
Edit Routes
Next step is to add a route that points to the theme. Open `core/urls.py and make the following change
# core/urls.py
# ... (truncated content)
from django.urls import path, include # make sure you have the INCLUDE directive
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('admin_soft.urls')), # <-- New
]
Now that all these changes have been made, open your browser and head to http://127.0.0.1:8000/
to see the changes made.
You can also check the admin dashboard by visiting http://127.0.0.1:8000/admin
.
At this point, our Django & MongoDB project is also styled with a nice, modern design.
✅ Conclusions​
Congratulations on completing the tutorial, so far we have covered the basics of setting up a Django project, connecting Django with MongoDB, viewing data stored in our MongoDB database and also using a prebuilt theme to get a head start in developing a Django application.
To sum up, connecting Django to MongoDB is a relatively straightforward process that involves only a few steps. With the power of Django's web framework and MongoDB's scalability and high availability, your applications will be able to handle large volumes of data with ease.
By following the above steps, you'll be able to connect Django to MongoDB quickly and begin building powerful and scalable web applications. You can visit Appseed for more templates like the one used for this tutorial.
✅ Resources​
- 👉 Access AppSeed for more starters and support
- 👉 Deploy Projects on Aws, Azure and DO via DeployPRO
- 👉 Create landing pages with Simpllo, an open-source site builder
- 👉 Build apps with Django App Generator (free service)