Cómo conectar una aplicación Django a MongoDB con PyMongo

El autor seleccionó a la Fundación Owasp para recibir una donación como parte del programa Write for DOnations .

Introducción

Django es un framework web Python de alto nivel, gratuito y de código abierto para desarrollar sitios web y aplicaciones dinámicos. Con Django, puedes crear rápidamente aplicaciones web Python y confiar en el framework para que haga la mayor parte del trabajo pesado.

Para crear una aplicación es necesario elegir entre una base de datos SQL o NoSQL . (Para obtener más información sobre bases de datos, consulte nuestros tutoriales sobre Comprensión de las bases de datos relacionales y Comparación de los sistemas y modelos de gestión de bases de datos NoSQL ). Las bases de datos NoSQL como MongoDB tienen la ventaja de ser eficientes a la hora de almacenar grandes cantidades de datos, lo que las hace ideales para su uso en aplicaciones de Big Data, Internet de las cosas (IoT) y más. Las bases de datos NoSQL se utilizan habitualmente en empresas que manejan grandes cantidades de datos.

La base de datos NoSQL más utilizada es MongoDB , una base de datos documental de código abierto que se utiliza para el almacenamiento de datos de gran volumen. En lugar de utilizar tablas y filas como las bases de datos relacionales tradicionales, MongoDB utiliza colecciones y documentos. Los documentos consisten en pares clave-valor, que son la unidad básica de datos en MongoDB.

PyMongo es la distribución oficial recomendada por Python para conectar tu aplicación Django a una base de datos MongoDB. PyMongo es una distribución de Python de código abierto que contiene herramientas para interactuar con MongoDB. Facilita la realización de operaciones CRUD ( Crear , Leer , Actualizar y Borrar ) con una base de datos MongoDB.

En este tutorial, creará un clúster de base de datos de MongoDB administrado y usará PyMongo para conectarlo con su aplicación Django. Luego, usará PyMongo para almacenar datos en su instancia de MongoDB y recuperarlos.

Prerrequisitos

Para este tutorial, necesitarás lo siguiente:

  • Django instalado en su sistema. Para ello, siga el tutorial Cómo instalar el framework web Django correspondiente a su distribución.
  • Una cuenta de DigitalOcean. Si no tiene una, regístrese para obtener una nueva cuenta .

Paso 1: Creación de un clúster MongoDB administrado por DigitalOcean

En este paso, utilizará su cuenta de DigitalOcean para configurar el clúster de base de datos MongoDB administrado.

Para comenzar, inicie sesión en su cuenta de DigitalOcean . Si creó una cuenta nueva, se creará un proyecto predeterminado para usted. Puede usar este proyecto o crear uno nuevo para seguir esta guía. En el proyecto que creó, haga clic en el botón verde Crear y seleccione la opción Bases de datos .

Seleccione MongoDB como motor de base de datos y elija un centro de datos . Puede cambiar el nombre del clúster de base de datos o utilizar el nombre predeterminado que se proporciona. Después de eso, haga clic en Crear clúster de base de datos .

Mientras se está aprovisionando la base de datos, se le solicitará que proteja su clúster de bases de datos especificando fuentes confiables. En el campo Agregar fuentes confiables , puede agregar la dirección IP de su computadora personal y el servidor en el que se encuentra su aplicación Django. Solo las conexiones desde estas direcciones IP podrán conectarse a su base de datos.

A continuación, se le proporcionarán los detalles de conexión y de su base de datos. Estos detalles incluyen username, password, hosty una base de datos predeterminada. Copie estos detalles y guárdelos en algún lugar seguro. Para este tutorial, utilizaremos la cadena de conexión , que es una cadena que contiene todos los detalles de su base de datos. Se ve así:

mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admintls=truetlsCAFile=PATH_TO_CA_FILE

Puede acceder a la cadena de conexión en Descripción general y, a continuación, Detalles de conexión . Seleccione el menú desplegable Parámetros de conexión y elija Cadena de conexión .

También necesitará descargar el certificado de CA. Necesitará el certificado para conectarse a la base de datos, ya que se requieren conexiones SSL para conectarse a la base de datos. Haga clic en Descargar certificado de CA debajo de los detalles de conexión del clúster en el Panel de control de DigitalOcean para descargar el certificado de CA de su clúster.

Por último, restablezca la contraseña del usuario administrador haciendo clic en la pestaña Usuarios y bases de datos . A continuación, haga clic en los tres puntos que se encuentran junto al usuario y utilice la opción Restablecer contraseña .

Esta acción abre una ventana modal en la que puedes volver a ingresar el nombre de usuario de administrador y restablecer la contraseña. No olvides esta contraseña, ya que la usarás en tu aplicación en pasos posteriores.

En este paso, ha creado su base de datos MongoDB y tiene los detalles que necesitará para conectarla a su aplicación Django. El siguiente paso es crear la aplicación Django en sí.

Paso 2: Creación de la aplicación Django

En este paso, creará la aplicación Django y la ejecutará.

Primero, crea un directorio para tu proyecto y cámbialo:

  1. mkdir ~/django-test
  2. cd ~/django-test

A continuación, utilice django-adminel startprojectcomando para crear su proyecto de Django. Puede utilizar cualquier nombre de proyecto; en este tutorial se utiliza DjangoMongo:

  1. django-admin startproject DjangoMongo

startprojectcreará un directorio dentro de su directorio de trabajo actual que incluye:

  • Un script de administración, manage.pyque puedes usar para administrar varias tareas específicas de Django.
  • Un directorio (con el mismo nombre que el proyecto) que incluye el código real del proyecto.

A continuación, vaya a la carpeta del proyecto:

  1. cd DjangoMongo

Para crear la aplicación Django, utilice el siguiente comando:

  1. python3 manage.py startapp djangoapp

Por último, ejecute el servidor Django para confirmar que todo se configuró correctamente:

  1. python3 manage.py runserver

Verá el siguiente resultado:

OutputPerforming system checks...System check identified no issues (0 silenced).You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.Run 'python manage.py migrate' to apply them.March 06, 2022 - 20:20:09Django version 1.11.22, using settings 'DjangoMongo.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CONTROL-C.

Abra el enlace http://127.0.0.1:8000en su navegador y verá la página de la aplicación Django predeterminada.

En este paso, creaste una aplicación Django y la ejecutaste correctamente en el navegador. A continuación, configurarás PyMongo para conectar tu clúster MongoDB a la aplicación Django.

Paso 3: Configuración de PyMongo

En este paso, instalará PyMongo y Dnspython . PyMongo es una distribución de Python que contiene herramientas para trabajar con MongoDB. PyMongo le permite guardar datos JSON en su base de datos y trabajar con todos los comandos de MongoDB. Dnspython es un kit de herramientas DNS para Python. Es necesario para usar las mongodb+srv://URI para conectarse a MongoDB administrado por DigitalOcean.

Instalar PyMongo usando pip3el comando:

  1. pip3 install pymongo

Instalar Dnspython usando pip3:

  1. pip3 install dnspython

Para conectar PyMongo a su base de datos MongoDB, primero deberá editar algunos detalles. En la DjangoMongocarpeta del proyecto, abra el settings.pyarchivo para editarlo con nanosu editor de texto favorito:

  1. nano settings.py

Comente toda la sección de la base de datos en el archivo, como se muestra aquí:

django-test/DjangoMongo/configuraciones.py

# DATABASES = {#     'default': {#         'ENGINE': 'django.db.backends.sqlite3',#         'NAME': BASE_DIR / 'db.sqlite3',#     }# }

A continuación, busque la INSTALLED APPSsección y agregue su aplicación Django a la lista de aplicaciones:

django-test/DjangoMongo/configuraciones.py

INSTALLED_APPS = [    'djangoapp',    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',]

Esta adición registra su aplicación en el proyecto Django para que sea reconocida por el proyecto. Puede tener varias aplicaciones en un proyecto Django; cada una deberá registrarse aquí.

Guarde y cierre el archivo cuando haya terminado.

En este paso, ha instalado PyMongo y Dnspython en su aplicación Django, ambos necesarios para conectar su aplicación Django a su base de datos MongoDB. A continuación, configurará PyMongo para configurar la conexión a su aplicación Django.

Paso 4: Configuración de PyMongo

En este paso, configurará la conexión a su base de datos MongoDB editando la configuración en los archivos urls.pyy views.py.

Para comenzar, deberá registrar nuevas URL para su aplicación Django. En la carpeta de su proyecto, ábrala urls.pypara editarla. Actualmente, hay una URL registrada allí para /admin. Deberá registrar una URL para la rootruta. También deberá agregar una importación en la parte superior del archivo. Agregue las líneas resaltadas a su archivo:

DjangoMongo/urls.py

from django.contrib import adminfrom django.urls import path, includeurlpatterns = [    path('',include('djangoapp.urls')),    path('admin/', admin.site.urls),]

Guarde y cierre el archivo cuando haya terminado.

A continuación, dirígete a la djangoappcarpeta de la aplicación y crea un nuevo urls.pyarchivo. En el nuevo archivo urls.py file, agrega el código siguiente:

djangoapp/urls.py

from django.urls import pathfrom . import viewsurlpatterns = [path('',views.index,name='index'),]

Este código conecta la URL que acaba de crear al views.pyarchivo para que, cuando se abra la URL, refleje el contenido del views.pyarchivo.

Guarde y cierre el archivo cuando haya terminado.

El último archivo que editarás es el views.pyarchivo , que también está en la djangoappcarpeta de la aplicación. Ábrelo djangoapp/views.pypara editarlo y agrega el siguiente bloque de código:

djangoapp/vistas.py

from django.http import HttpResponse# Create your views here.def index(request):    return HttpResponse("h1Hello and welcome to my first uDjango App/u project!/h1")

La primera línea agrega una importación. Puedes dejar cualquier otra importación que se haya generado con el archivo.

Las líneas después de la importación mostrarán el texto “Hola y bienvenido a mi proyecto de aplicación Django” en lugar de la página predeterminada de Django cuando se abra la aplicación en el navegador.

A continuación, agregue la siguiente línea para importar PyMongo:

djangoapp/vistas.py

import pymongo

En el mismo archivo, agregue la siguiente línea para crear una instancia del cliente de PyMongo. Reemplace la cadena de conexión con su propia cadena de conexión y actualice la ruta al archivo de certificado de CA que descargó.

djangoapp/vistas.py

client = pymongo.MongoClient('mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admintls=truetlsCAFile=PATH_TO_CA_FILE')

A continuación, defina el nombre de la base de datos y la colección a la que se va a conectar. Cuando crea un clúster de bases de datos en MongoDB administrado por DigitalOcean, adminse crea una base de datos predeterminada con el nombre. Puede usarla o crear otra base de datos en la consola.

djangoapp/vistas.py

#Define Db Namedbname = client['admin']#Define Collectioncollection = dbname['mascot']

En este caso, el nombre de la base de datos es adminy el nombre de la colección que estás creando es mascot. Una colección en MongoDB es un grupo de documentos.

Ahora, agregará un documento a la colección en la base de datos:

djangoapp/vistas.py

mascot_1={    "name": "Sammy",    "type" : "Shark"}

Este es un documento simple con solo un namey type.

A continuación, insertará este documento en la colección de la siguiente manera:

djangoapp/vistas.py

collection.insert_one(mascot_1)

Ahora, recuperará los detalles del documento que acaba de insertar en la base de datos para confirmar que funcionó correctamente:

djangoapp/vistas.py

mascot_details = collection.find({})for r in mascot_details:    print(r['name'])

El código anterior recupera todos los datos que almacenaste en la base de datos y luego los recorre en bucle para mostrar el nombre de la mascota en la terminal. Aquí estás recorriendo los datos en bucle porque collection.finddevolverá los documentos como una matriz. Para devolver un solo documento, puedes usar el findOnecomando.

El código final del views.pyarchivo se ve así:

djangoapp/vistas.py

from django.shortcuts import renderfrom django.http import HttpResponse# Create your views here.def index(request):    return HttpResponse("h1Hello and welcome to my uDjango App/u project!/h1")import pymongoclient = pymongo.MongoClient('mongodb+srv://username:password@HOSTNAME/DATABASE_NAME?authSource=admintls=truetlsCAFile=PATH_TO_CA_FILE')#Define DB Namedbname = client['admin']#Define Collectioncollection = dbname['mascot']mascot_1={    "name": "Sammy",    "type" : "Shark"}collection.insert_one(mascot_1)mascot_details = collection.find({})for r in mascot_details:    print(r['name'])

Guarde y cierre el archivo cuando haya terminado.

Ahora, ejecuta tu aplicación Django final con el comando:

  1. python3 manage.py runserver

El resultado será similar al siguiente:

OutputWatching for file changes with StatReloaderPerforming system checks...SammySystem check identified no issues (0 silenced).March 08, 2022 - 00:35:01Django version 3.2.12, using settings 'DjangoProject.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CONTROL-C.

Como puede ver en el resultado anterior, se conectó exitosamente a su base de datos MongoDb, insertó algunos datos en ella y recuperó los datos.

Conclusión

Ha conectado correctamente su aplicación Django a una base de datos MongoDB mediante PyMongo. Debe tener en cuenta que, si bien existen otros controladores de Python para conectar una aplicación Django a una base de datos MongoDB (como Djongo y MongoEngine), Pymongo es el controlador oficial.

Puede utilizar todos los comandos MongoDB disponibles con PyMongo para crear, leer, editar y eliminar datos de su base de datos. Puede encontrar más instrucciones sobre cómo utilizar PyMongo en la documentación oficial de PyMongo .

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio