Cómo crear una aplicación Django y conectarla a una base de datos

Introducción

Django es un marco de trabajo web gratuito y de código abierto escrito en Python. Esta herramienta permite escalabilidad, reutilización y desarrollo rápido.

En este tutorial, aprenderás cómo configurar los cimientos iniciales para un sitio web de blog con conexiones a una base de datos MySQL. Esto implicará crear la estructura esquelética de la aplicación web de blog utilizando django-admin, crear la base de datos MySQL y conectar la aplicación web a la base de datos.

Django te proporcionará un entorno de desarrollo para trabajar en tu aplicación web de blog, pero necesitarás seguir más pasos antes de hacer que tu blog esté en vivo en Internet.

Prerrequisitos

Para seguir este tutorial, necesitarás:

Una vez que todo esté instalado y configurado, puede pasar al primer paso.

Paso 1 — Creación de la Base de Datos

Django admite varios sistemas populares de gestión de bases de datos, pero esta guía se centra en conectar Django a una base de datos MySQL. Para hacer esto, necesita crear una base de datos en su instancia de MySQL, así como un perfil de usuario de MySQL que Django pueda usar para conectarse a la base de datos.

Para configurar esto, conéctese a su base de datos MySQL como usuario root MySQL con el siguiente comando:

  1. sudo mysql

Sabrá que está en el servidor MySQL cuando cambie el indicador:

Inspeccione las bases de datos actuales con el siguiente comando:

  1. SHOW DATABASES;

Su salida será similar a la siguiente, suponiendo que aún no haya creado ninguna base de datos:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

De forma predeterminada, ya tendrá 4 bases de datos creadas: information_schema, MySQL, performance_schema y sys. No necesitará tocar estas, ya que contienen información importante para el propio servidor MySQL.

En su lugar, cree la base de datos inicial que contendrá los datos para su blog.

Para crear una base de datos en MySQL, ejecute el siguiente comando, utilizando un nombre significativo para su base de datos:

  1. CREATE DATABASE blog_data;

Tras la creación exitosa de la base de datos, la salida será la siguiente:

Output
Query OK, 1 row affected (0.00 sec)

Verifique que la base de datos ahora esté listada como una de las bases de datos disponibles:

  1. SHOW DATABASES;

La base de datos blog_data debería estar ahora listada entre las bases de datos incluidas en la salida:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

A continuación, cree una cuenta de usuario separada en MySQL que Django utilizará para operar la nueva base de datos. Crear bases de datos y cuentas específicas puede respaldarlo desde el punto de vista de la gestión y la seguridad. Utilizaremos el nombre djangouser en esta guía. Puede utilizar el nombre que desee, pero puede ser útil elegir un nombre descriptivo.

Usted va a crear esta cuenta, establecer una contraseña y otorgar acceso a la base de datos que creó. Primero, cree el usuario y establezca su contraseña escribiendo el siguiente comando. Recuerde elegir una contraseña fuerte para su base de datos reemplazando password en este ejemplo:

  1. CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Informe a la base de datos que djangouser debería tener acceso completo a la base de datos que configuró:

  1. GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

Ahora tiene una base de datos y una cuenta de usuario, cada una creada específicamente para Django. Limpie los privilegios para que la instancia actual de MySQL conozca los cambios recientes que ha realizado:

  1. FLUSH PRIVILEGES;

Con eso completo, puede salir del servidor MySQL escribiendo EXIT; o presionando CTRL + D.

Paso 2 — Creación de un Archivo de Opciones de MySQL

En lugar de especificar los detalles de conexión de MySQL en el archivo de configuración de Django, puedes almacenarlos en un archivo de opciones. Muchos programas de MySQL pueden leer archivos de opciones — también conocidos como archivos de configuración — para obtener información como opciones de inicio o detalles de conexión. Esto puede ser conveniente, ya que solo tienes que almacenar las credenciales de inicio de sesión de tu base de datos en un solo lugar.

Abre el archivo de configuración my.cnf con tu editor de texto preferido para actualizar tus credenciales de MySQL. Aquí usaremos nano:

  1. sudo nano /etc/mysql/my.cnf

Agrega las siguientes líneas e incluye tu información relevante:

/etc/mysql/my.cnf
…

[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

Observa que utf8 se establece como la codificación predeterminada. Esta es una forma común de codificar datos Unicode en MySQL. Cuando estés seguro de que tus detalles son correctos, guarda y cierra el archivo. Si usaste nano para editar el archivo, puedes hacerlo presionando CTRL + O para guardar el archivo y luego CTRL + X para cerrar el editor.

Una vez que hayas editado el archivo, reinicia MySQL para que los cambios surtan efecto:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart mysql

Ten en cuenta que reiniciar MySQL lleva unos segundos, así que por favor ten paciencia.

Paso 3 — Creando el Esqueleto Inicial del Proyecto Django

En este paso, sentarás las bases para tu aplicación generando el esqueleto del proyecto usando el comando django-admin.

Navega hasta el directorio donde te gustaría construir tu aplicación de blog. Dentro de ese directorio, crea un directorio específico para construir la aplicación. Llama al directorio de una manera significativa para la aplicación que estás construyendo. Como ejemplo, nosotros lo llamaremos mi_aplicacion_de_blog:

  1. mkdir my_blog_app

Ahora, navega hasta el directorio recién creado:

  1. cd my_blog_app

A continuación, ingresa al entorno de programación que desees utilizar para trabajar en Django. Puedes usar uno existente o crear uno nuevo. El siguiente comando crea un nuevo entorno llamado env, pero deberías usar un nombre que tenga significado para ti:

  1. python3 -m venv env

Una vez creado, puedes activarlo:

  1. . env/bin/activate

Ahora instala Django en este entorno si aún no lo has hecho:

  1. pip install django

Mientras estés en el directorio mi_aplicacion_de_blog, genera un proyecto ejecutando el siguiente comando:

  1. django-admin startproject blog

Verifica que haya funcionado navegando al directorio blog/:

  1. cd blog

Luego ejecuta ls para verificar que se hayan creado los archivos y directorios necesarios dentro de la carpeta del proyecto:

  1. ls

La salida mostrará el directorio blog y un archivo manage.py:

Output
blog manage.py

Ahora que has creado un directorio de proyecto que contiene el inicio inicial de tu aplicación de blog, puedes continuar con el próximo paso.

Paso 4 — Instalación del Conector de Base de Datos MySQL

Para poder usar MySQL con tu proyecto, necesitas una biblioteca de conectores de base de datos Python 3 compatible con Django. Este paso describe cómo instalar uno de esos conectores de base de datos, mysqlclient, que es una versión bifurcada de MySQLdb.

Primero, instala los encabezados y bibliotecas de desarrollo necesarios de MySQL:

  1. sudo apt install libmysqlclient-dev default-libmysqlclient-dev

A continuación, usa pip para instalar el paquete wheel. Wheel es un formato de empaquetado utilizado en Python para instalar módulos desde el Índice de Paquetes de Python. Instalar programas de Python desde paquetes de ruedas generalmente es más rápido y más eficiente en recursos que construir paquetes a partir de su código fuente. Para instalar y trabajar con programas empaquetados como ruedas, primero debes asegurarte de que el paquete wheel esté instalado:

  1. pip install wheel

Luego procede con la instalación de mysqlclient:

  1. pip install mysqlclient

Tu salida será similar a la siguiente, verificando que el cliente se haya instalado correctamente:

Output
... Successfully installed mysqlclient-2.1.1

Ahora has instalado con éxito el cliente de MySQL utilizando la biblioteca de conectores mysqlclient de PyPi.

Paso 5 — Edición de configuraciones

Cuando ejecutaste django-admin anteriormente, creó un archivo de configuración para Django llamado settings.py. Necesitas cambiar algunas de las configuraciones predeterminadas en este archivo para que todo funcione correctamente.

Para editar el archivo, abre la ruta del archivo con tu editor de texto preferido:

  1. nano ~/my_blog_app/blog/blog/settings.py

Para que tu blog tenga la hora correcta asociada con tu área, puedes editar el archivo settings.py para que use tu zona horaria actual. Puedes utilizar esta lista de zonas horarias como referencia. Para nuestro ejemplo, utilizaremos la hora de América/Nueva_York.

Dentro del archivo, navega hasta el campo TIME_ZONE cerca de la sección inferior del archivo:

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

Modifica la línea TIME_ZONE, de modo que esté configurada con tu zona horaria actual. En este ejemplo, utilizaremos la zona horaria de Nueva York:

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

Mantén abierto el archivo porque a continuación, necesitas agregar una ruta para tus archivos estáticos. Los archivos que se sirven desde tu aplicación web Django se conocen como archivos estáticos. Esto podría incluir cualquier archivo necesario para renderizar la página web completa, incluidos JavaScript, CSS e imágenes.

Ve al final del archivo settings.py y agrega STATIC_ROOT:

~/my_blog_app/blog/blog/settings.py
…

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...

Ahora que has añadido la zona horaria y la ruta para los archivos estáticos, agrega tu IP a la lista de hosts permitidos. Navega hasta la línea del archivo settings.py donde dice ALLOWED_HOSTS, estará hacia la parte superior del archivo settings.py. Agrega la dirección IP de tu servidor, rodeada por comillas simples, entre corchetes cuadrados:

~/my_blog_app/blog/blog/settings.py
...
ALLOWED_HOSTS = ['your_server_IP_address']
...

A continuación, añade el módulo OS de Python que proporciona varias funcionalidades para directorios. Sin este módulo, recibirás un error al configurar el usuario administrativo para comenzar a usar la interfaz de Django. Para hacer esto, necesitas importar el módulo os que funcionará en tu sistema operativo respectivo. Agrega la línea import os encima de la línea from pathlib import Path:

~/my_blog_app/blog/blog/settings.py
...
import os
from pathlib import Path
...

Hasta ahora has editado tu archivo settings.py para configurar la zona horaria adecuada. También has añadido la ruta para tus archivos estáticos, configurado tu dirección IP para ser un HOST PERMITIDO para tu aplicación, e importado el módulo OS de Python para ayudar a configurar tu usuario administrativo más adelante.

El último fragmento para añadir a tu archivo son las credenciales de conexión a la base de datos para conectar tu aplicación de blog de Django a MySQL. Con este fin, encuentra el diccionario DATABASES dentro del archivo. Por defecto, lucirá así:

~/my_blog_app/blog/blog/settings.py
…

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

Reemplaza las opciones ENGINE y NAME del diccionario DATABASES con las siguientes líneas:

~/my_blog_app/blog/blog/settings.py
...

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.mysql',
    	'OPTIONS': {
        	'read_default_file': '/etc/mysql/my.cnf',
    	},
	}
}
...

La línea 'ENGINE': 'django.db.backends.mysql' le indica a Django que utilice su backend de base de datos MySQL incorporado. La opción read_default_file apunta a /etc/mysql/my.cnf, el archivo de opciones de MySQL que editaste anteriormente. Esto le dice a Django dónde puede encontrar los detalles de conexión relevantes para conectarse a la base de datos MySQL que creaste en el Paso 1.

Ten en cuenta que Django lee la configuración de conexión a la base de datos en el siguiente orden:

  • OPTIONS
  • NAME, USER, PASSWORD, HOST, PORT
  • Archivos de opciones de MySQL

Al señalar a Django hacia tu archivo de opciones de MySQL dentro del ajuste OPTIONS como en este ejemplo, tomará precedencia sobre cualquier ajuste NAME, que de otro modo anularía el archivo de opciones si apuntaras a él fuera del ajuste OPTIONS.

En este punto, puedes guardar y cerrar el archivo.

A continuación, verifica los cambios de migración ejecutando lo siguiente:

  1. python manage.py makemigrations

Luego, ejecuta migrate para asegurarte de que los cambios se realicen:

  1. python manage.py migrate

Ahora que se han migrado tus cambios, puedes crear un usuario administrativo para usar en la interfaz de administración de Django. Haz esto con el comando createsuperuser:

  1. python manage.py createsuperuser

Se te solicitará un nombre de usuario, una dirección de correo electrónico y una contraseña para tu usuario.

Después de completar esta información, puedes pasar a ajustar la configuración de tu firewall para permitir pruebas.

Paso 6 — Ajuste de la configuración del cortafuegos

Antes de probar su aplicación web Django, debe asegurarse de que se hayan ajustado los ajustes de su cortafuegos. Comience cambiando la configuración de ufw para permitir el acceso al puerto 8000:

  1. sudo ufw allow 8000

Verifique el estado para asegurarse de que estos ajustes de permisos se hayan actualizado correctamente:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)

Ahora sus ajustes de cortafuegos están correctamente configurados para permitir la prueba de su conexión en el próximo paso.

Paso 7 — Prueba de conexión MySQL a la aplicación

Ahora puede verificar que las configuraciones en Django detecten su servidor MySQL correctamente. Puede hacer esto ejecutando el servidor. Si falla, significa que la conexión no está funcionando correctamente. De lo contrario, la conexión es válida.

Primero navegue hasta el siguiente directorio:

  1. cd ~/my_blog_app/blog/

Desde allí, ejecute el siguiente comando:

  1. python manage.py runserver your-server-ip:8000

Recibirá una salida similar a la siguiente:

Output
Performing system checks... System check identified no issues (0 silenced). July 19, 2022 - 13:26:08 Django version 4.0.6, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.

Nota: Notará que tiene migraciones no aplicadas en la salida. No se preocupe, esto no afecta la configuración inicial de su aplicación y puede continuar.

Siga las instrucciones de la salida y siga el enlace sugerido, http://tu-dirección-ip-del-servidor:8000/, para ver tu aplicación web y verificar que esté funcionando correctamente.

Si tu página aparece similar a la captura de pantalla de arriba, tu aplicación Django está funcionando según lo esperado.

Cuando hayas terminado de probar tu aplicación, presiona CTRL + C para detener el comando runserver. Esto te devolverá a tu entorno de programación.

Cuando estés listo para salir de tu entorno de Python, puedes ejecutar el comando deactivate:

  1. deactivate

Desactivar tu entorno de programación te devolverá al símbolo del comando del terminal.

Conclusión

En este tutorial, creaste la base inicial de tu blog de Django. Has instalado, configurado y conectado MySQL al backend de Django. También has agregado información importante al archivo settings.py de tu aplicación, como TIME_ZONE, ALLOWED_HOSTS, import os, y las credenciales de la base de datos para conectar tu aplicación Django a MySQL. También ajustaste la configuración del firewall para asegurarte de que las pruebas se realicen sin problemas.

Ahora que estas configuraciones básicas están completas, puedes comenzar a desarrollar modelos y aplicar migraciones en tu aplicación Django.

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database