<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jonathan Pumares</title>
    <description>The latest articles on Forem by Jonathan Pumares (@iamjonathanpumares).</description>
    <link>https://forem.com/iamjonathanpumares</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F596248%2F1a62ffd3-eee8-493b-a12f-43b4b88be813.png</url>
      <title>Forem: Jonathan Pumares</title>
      <link>https://forem.com/iamjonathanpumares</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/iamjonathanpumares"/>
    <language>en</language>
    <item>
      <title>Introducción a la nube</title>
      <dc:creator>Jonathan Pumares</dc:creator>
      <pubDate>Mon, 29 Nov 2021 20:35:15 +0000</pubDate>
      <link>https://forem.com/iamjonathanpumares/introduccion-a-la-nube-14lk</link>
      <guid>https://forem.com/iamjonathanpumares/introduccion-a-la-nube-14lk</guid>
      <description>&lt;p&gt;Seguramente montaste tu primera aplicación o sitio web en un hosting compartido, ese servidor en donde tenias que compartir sus recursos con otras personas y subir el código a través de FTP, desde ese entonces, la web a evolucionado a pasos agigantados, dando lugar a todo un conjunto de servicios y soluciones para cada necesidad y para cada empresa.&lt;/p&gt;

&lt;p&gt;Ahora no solamente puedes contratar un servidor, sino tienes a tu disposición múltiples servicios que puedes utilizar para tus próximos proyectos o en tu empresa, desde servidores, almacenamiento, bases de datos, redes, software, entre muchos servicios más.&lt;/p&gt;

&lt;p&gt;Estos servicios que te acabo de mencionar pueden agruparse en tres categorías principales. Pero antes de entrar en detalles veamos qué es la nube.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es la nube?
&lt;/h2&gt;

&lt;p&gt;Es posible que lo primero que se te venga a la mente, son esos satélites que se encuentra en órbita alrededor de la Tierra, pero no, eso definitivamente no es la nube. ¿Qué si es la nube? Es todo ese conjunto de servidores (supercomputadoras con mucho poder de cómputo) distribuidos en distintas zonas geográficas a través del mundo, que nos proveen de estos servicios.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Quién es dueño de estos servidores?
&lt;/h2&gt;

&lt;p&gt;En realidad se les conoce como proveedores de nube, y son todas aquellas empresas que nos ofrecen y permiten acceder a estos servicios informáticos que ya te mencione. Es muy similar a cuando contratas tu servicio de Internet, en donde tienes distintas opciones por elegir y terminas escogiendo la que más se ajusta a tu presupuesto y necesidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué proveedores de nube podemos elegir?
&lt;/h2&gt;

&lt;p&gt;La gran cantidad de opciones que tenemos es muy variada y elegir una dependerá de distintos factores, como las necesidades del proyecto, el tamaño de la empresa, la infraestructura que se cuenta actualmente, si deseas migrar a la nube, etc.&lt;/p&gt;

&lt;p&gt;Aquí te mostraré los proveedores de nube más utilizados en la industria tech:&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Web Services (AWS)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kH4_0DO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6011z4ek6859msaehd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kH4_0DO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6011z4ek6859msaehd5.png" alt="Amazon Web Services" width="256" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El gigante de las compras en línea ofrece más de 200 de servicios integrales a nuestra disposición.&lt;/p&gt;

&lt;p&gt;Sí conoces acerca de AWS y su funcionamiento tienes una oferta laboral garantizada ya que es de los proveedores de nube más utilizados por las empresas. Además en su propio sitio ofrece un programa de formación en línea para que te certifiques a través de sus cursos.&lt;/p&gt;

&lt;p&gt;Sitio web: &lt;a href="https://aws.amazon.com/"&gt;https://aws.amazon.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft Azure
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4bH5Gx4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5sem44fkyrj09kyikfj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4bH5Gx4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5sem44fkyrj09kyikfj7.png" alt="Microsoft Azure" width="256" height="74"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La cantidad de servicios que ofrece, la hace una opción muy atractiva. Aparte tiene integración con distintas tecnologías como C#, Python, entre otras.&lt;/p&gt;

&lt;p&gt;Microsoft ofrece a todas aquellas personas que quieren aprender sobre la nube y Azure una plataforma de aprendizaje llamada de Microsoft Learn, donde al igual que en AWS tienes la posibilidad de que te certifiques en el uso de sus tecnologías.&lt;/p&gt;

&lt;p&gt;Un dato interesante es que Microsoft cuenta con la mayor cantidad de data centers en el mundo, así que es casi seguro que puedes contratar cualquier servicio de Azure en una ubicación cerca de ti.&lt;/p&gt;

&lt;p&gt;Sitio web: &lt;a href="https://azure.microsoft.com/"&gt;https://azure.microsoft.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Cloud
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LjUYK5Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fp9gu3c83zi8pzqsjakv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LjUYK5Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fp9gu3c83zi8pzqsjakv.png" alt="Google Cloud" width="256" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El búscador más grande de Internet, igualmente ofrece sus servicios en la nube, y es junto a AWS y Azure de los más utilizados por las empresas, ofreciendo servicios como hospedaje web, almacenamiento y desarrollo de aplicaciones que se ejecutan directamente en los servidores de Google.&lt;/p&gt;

&lt;p&gt;Sitio web: &lt;a href="https://cloud.google.com/"&gt;https://cloud.google.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  DigitalOcean
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qMjff1HX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8sojl29i617rgc4w5re1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qMjff1HX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8sojl29i617rgc4w5re1.png" alt="DigitalOcean" width="256" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una opción muy interesante si quieres iniciarse en este mundo de los servicios en la nube, ya que ofrece un VPS (Virtual Private Server) que ellos llaman Droplets, por solo 5 dólares por mes, una opción muy económica para que experimentes el poder de la nube.&lt;/p&gt;

&lt;p&gt;DigitalOcean tiene una gran comunidad en donde comparten una gran cantidad de tutoriales muy interesantes, desde como configurar por primera vez tu servidor de manera correcta, hasta instalar todas las herramientas que necesitas para montar tu aplicación.&lt;/p&gt;

&lt;p&gt;Sitio web: &lt;a href="https://www.digitalocean.com/"&gt;https://www.digitalocean.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  IBM Cloud
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MwQUOHy4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/21slukbv0nikiqk8y2ag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MwQUOHy4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/21slukbv0nikiqk8y2ag.png" alt="IBM Cloud" width="256" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IBM Cloud ofrece soluciones para entornos corporativos, lo que la hace una opción muy interesante, ya que se adapta muy bien a las principales necesidades de las organizaciones, desde el requerimiento más sencillo hasta soluciones complejas con Inteligencia Artificial (IA).&lt;/p&gt;

&lt;p&gt;Sitio web: &lt;a href="https://cloud.ibm.com/"&gt;https://cloud.ibm.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modelos de servicio en la nube
&lt;/h2&gt;

&lt;p&gt;Ya que conoces algunos de los proveedores de nube más utilizados, te había mencionado que todo este conjunto de servicios que ofrecen podemos clasificarlos en tres categorías principales, pero antes de entrar en contexto con esta clasificación déjame contarte que existe la posibilidad en donde la infraestructura de tu empresa o proyecto aún se encuentre en un entorno local, es decir, dentro de las instalaciones de la propia organización, en donde somos responsables de administrar cada uno de los elementos de la infraestructura, como servidores, virtualización, aplicaciones, etc.&lt;/p&gt;

&lt;p&gt;Aunque está sigue siendo una opción muy válida, la idea de migrarse a la nube tiene dos ventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para los administradores de sistemas es un alivio, ya que no tendrán que preocuparse más por la administración de los servidores locales de la organización, sino dependiente del modelo de servicio que se contrate se va teniendo menos responsabilidades por administrar. Te dejo la siguiente imagen en donde puedes visualizar que elementos son los que administra el usuario y que elementos administra el proveedor dependiendo del modelo de servicio:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lc06pt3e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xqca88c3abq2cbkz9grf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lc06pt3e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xqca88c3abq2cbkz9grf.png" alt="Modelos de servicio en la nube" width="531" height="341"&gt;&lt;/a&gt;&lt;br&gt;
Fuente: &lt;a href="https://docs.microsoft.com/learn/modules/align-requirements-in-azure/3-service-models"&gt;https://docs.microsoft.com/learn/modules/align-requirements-in-azure/3-service-models&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;La segunda ventaja es que los servicios en la nube ofrecen un modelo basado en consumo lo que significa que solamente pagas por lo que usas. En caso contrario, en un modelo On-Premises o local, tienes que invertir en infraestructura física, que es deducible a larzo plazo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Voy a mencionarte una ventaja más que se relaciona con la ventaja anterior, y es que la nube nos ofrece los recursos necesarios para que nuestra aplicación funcione de manera optima, imagina que por temporada tu aplicación tiene un aumento en el número de usuarios que la consultan de manera recurrente, la nube nos permite escalar los recursos de manera fácil y sencilla, y cuando termine esa temporada podemos reducir los recursos para no afectar la factura del mes. En el caso del modelo On-Premises o local, tendrías que invertir en memoria RAM y otros recursos si quieres aumentar la capacidad de tus servidores. Pero aquí no puedes devolver los recursos que ya has comprado, por lo que es una inversión a largo plazo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ahora si vayamos a los 3 principales modelos de servicio en la nube.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infraestructura como servicio (IaaS)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XZ-xOgf3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y0vfhlpkl2peh7wx13kx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XZ-xOgf3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y0vfhlpkl2peh7wx13kx.png" alt="Infraestructura como servicio" width="202" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este tipo de modelo de servicio, el proveedor proporciona al cliente acceso directo a infraestructura tecnológica, como servidores, bases de datos y otros recursos en la nube.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plataforma como servicio (PaaS)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--86WCJuNs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a66sn2i614l89ty13w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--86WCJuNs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a66sn2i614l89ty13w2.png" alt="Plataforma como servicio" width="210" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El proveedor proporciona a los usuarios acceso a un entorno de nube en el que pueden desarrollar, gestionar y entregar aplicaciones. En este modelo prácticamente el proveedor se encarga de ofrecer y administrar la infraestructura mientras que el usuario se preocupa de desarrollar y entregar la solución.&lt;/p&gt;

&lt;h3&gt;
  
  
  Software como servicio (SaaS)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eI5ueIXd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9u26x2t0w353m99mmcdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eI5ueIXd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9u26x2t0w353m99mmcdt.png" alt="Software como servicio" width="210" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los usuarios tienen acceso a un software que se encuentra en la nube a través de una suscripción, accediendo por medio de la web desde un navegador o por medio de las API del proveedor.&lt;/p&gt;

&lt;p&gt;¿Tienes cuenta en Spotify o Netflix? Estás usando un Software como servicio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tu camino hacia el cloud computing apenas comienza
&lt;/h2&gt;

&lt;p&gt;Ahora que conoces todo lo que ofrece la nube, te invito a seguir aprendiendo más acerca del cloud computing, ya que tendrás mejores oportunidades laborales, porque cada vez más empresas están migrando a la nube y necesitan de profesionales que les ayuden en ese proceso de migración.&lt;/p&gt;

&lt;p&gt;No dudes en compartir este post si te ha parecido genial.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>iaas</category>
      <category>paas</category>
      <category>saas</category>
    </item>
    <item>
      <title>Cómo instalar y configurar phpMyAdmin para tu entorno de desarrollo</title>
      <dc:creator>Jonathan Pumares</dc:creator>
      <pubDate>Fri, 19 Nov 2021 22:24:22 +0000</pubDate>
      <link>https://forem.com/iamjonathanpumares/como-instalar-y-configurar-phpmyadmin-para-tu-entorno-de-desarrollo-201c</link>
      <guid>https://forem.com/iamjonathanpumares/como-instalar-y-configurar-phpmyadmin-para-tu-entorno-de-desarrollo-201c</guid>
      <description>&lt;p&gt;Cuando estamos en la etapa de desarrollo de nuestro sistema, solución o aplicación, necesitamos visualizar los detalles que contiene nuestra base de datos, ya sea consultar información, crear una nueva base de datos para el proyecto, correr un script para generar la estructura de la misma base de datos, insertar los datos, etc. &lt;/p&gt;

&lt;p&gt;Para ello existen una gran variedad de clientes gráficos que podemos utilizar para conectarnos a nuestro servidor de base de datos. En esta ocasión quiero hablarte de phpMyAdmin, uno de mis clientes de bases de datos para MySQL favoritos, que utilizo para mi entorno de desarrollo.&lt;/p&gt;

&lt;p&gt;Pero primero déjame contarte que es phpMyAdmin.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es phpMyAdmin?
&lt;/h2&gt;

&lt;p&gt;Es una herramienta de software libre escrita en PHP, para manejar la administración de bases de datos MySQL y MariaDB, y todo desde tu navegador favorito. Que sea meramente un cliente de interfaz gráfica no limita que no puedas utilizar sentencias SQL desde la propia interfaz.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué puedes hacer con phpMyAdmin?
&lt;/h2&gt;

&lt;p&gt;Si hay algo que me encanta de phpMyAdmin es su interfaz intuitiva para tener todo a la mano desde unos cuantos clics.&lt;/p&gt;

&lt;p&gt;Además de que cuenta con una cantidad de características para que la administración desde la interfaz sea más fácil.&lt;/p&gt;

&lt;p&gt;Déjame decirte algunos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navega entre tus bases de datos, tablas, campos, índices y vistas de una manera sencilla&lt;/li&gt;
&lt;li&gt;Crea, copia, elimina, renombra y modifica bases de datos, tablas y campos&lt;/li&gt;
&lt;li&gt;Administra los usuarios y privilegios de MySQL&lt;/li&gt;
&lt;li&gt;Importa datos desde archivos CSV y scripts SQL&lt;/li&gt;
&lt;li&gt;Exporta datos a varios formatos: CSV, SQL, XML, PDF y otros&lt;/li&gt;
&lt;li&gt;Administra múltiples servidores&lt;/li&gt;
&lt;li&gt;Y muchas más...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Aún no te convences?
&lt;/h2&gt;

&lt;p&gt;Si aún no te convence utilizar phpMyAdmin, en su sitio oficial cuenta con una demo que puedes probar para que vayas viendo todas las posibilidades que tienes al usar esta herramienta.&lt;/p&gt;

&lt;p&gt;Ve al sitio web oficial &lt;a href="https://www.phpmyadmin.net/"&gt;https://www.phpmyadmin.net/&lt;/a&gt; y del lado superior derecho encontrarás un botón color verde con la leyenda &lt;strong&gt;"Try demo"&lt;/strong&gt;, da clic en el botón y te abrirá enseguida la interfaz gráfica para que interactues con la demo. Prueba todas las opciones y dime que te parecen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando y configurando phpMyAdmin
&lt;/h2&gt;

&lt;p&gt;Si ya estas listo para empezar a usar phpMyAdmin vayamos a instalar y configurar esta maravillosa herramienta.&lt;/p&gt;

&lt;p&gt;Existen muchas maneras de instalar phpMyAdmin, empezaremos viendo las opciones que tenemos para cada sistema operativo y luego veremos cómo hacerlo de forma manual independiente del sistema operativo que tengamos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalando phpMyAdmin usando XAMPP
&lt;/h3&gt;

&lt;p&gt;La manera más fácil de instalar phpMyAdmin en Windows, Linux o macOS es usando un paquete de terceros que ya incluya phpMyAdmin, por lo que no tenemos que preocuparnos por instalarlo y configurarlo de manera separada.&lt;/p&gt;

&lt;p&gt;Uno de esos paquetes es &lt;strong&gt;XAMPP&lt;/strong&gt;, que es un conjunto o stack de tecnologías para montar tu entorno de desarrollo de una manera sencilla y que te incluye todo lo necesario para que empieces a desarrollar tus aplicaciones con PHP.&lt;/p&gt;

&lt;p&gt;Qué es lo que incluye XAMPP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache como servidor web&lt;/li&gt;
&lt;li&gt;MariaDB como servidor de base de datos&lt;/li&gt;
&lt;li&gt;PHP como lenguaje de programación&lt;/li&gt;
&lt;li&gt;phpMyAdmin como cliente gráfico de bases de datos MySQL y MariaDB&lt;/li&gt;
&lt;li&gt;Entre otras herramientas más...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si algo caracteriza a XAMPP es que el proceso de instalación para cada sistema operativo es muy sencillo, por lo que solamente tienes que descargar y ejecutar el instalador. &lt;a href="https://www.apachefriends.org/es/download.html"&gt;Aquí te dejo la página&lt;/a&gt; para que lo descargues y lo instales en tu sistema operativo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalación manual
&lt;/h3&gt;

&lt;p&gt;En caso de que tengas otro entorno de desarrollo diferente a XAMPP y que no incluya directamente phpMyAdmin tendremos que realizar la instalación manual de phpMyAdmin, pero no te preocupes ya que esto es muy sencillo.&lt;/p&gt;

&lt;p&gt;¿Quieres conocer qué otros entornos de desarrollo puedes instalar?&lt;/p&gt;

&lt;p&gt;Te dejo la siguiente infografía de Guardianes del Código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BvB6Ybz0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85gelrryt5a8qb4lm2xx.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BvB6Ybz0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85gelrryt5a8qb4lm2xx.jpeg" alt="Entornos de desarrollo para trabajar con PHP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y el siguiente video para que conozcas más detalles de estas herramientas:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-14TE06R6Eg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Ahora si vayamos a la instalación:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ve al sitio web oficial &lt;a href="https://www.phpmyadmin.net/"&gt;https://www.phpmyadmin.net/&lt;/a&gt; y del lado superior derecho encontrarás el botón verde con la leyenda &lt;strong&gt;Download&lt;/strong&gt;, enseguida se descargará un archivo &lt;strong&gt;.zip&lt;/strong&gt; con el siguiente formato &lt;code&gt;phpMyAdmin-&amp;lt;version&amp;gt;-all-languages.zip&lt;/code&gt; y que puedes guardarlo por el momento en cualquier ubicación de tu sistema de archivos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Descomprime el archivo &lt;strong&gt;.zip&lt;/strong&gt;, si lo descomprimes directamente se guardará todo dentro de una carpeta con el siguiente formato &lt;code&gt;phpMyAdmin-&amp;lt;version&amp;gt;-all-languages&lt;/code&gt;, te recomiendo renombrar el nombre de la carpeta por algo más sencillo como &lt;code&gt;phpmyadmin&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Identifica la carpeta &lt;strong&gt;root&lt;/strong&gt; en donde tu entorno de desarrollo sirve o ejecuta directamente los archivos PHP. Si estas usando Laragon con Windows muy posiblemente esa ubicación sea &lt;code&gt;C:\laragon\www&lt;/code&gt;, en otros entornos se conoce como &lt;code&gt;htdocs&lt;/code&gt;. Copia en esa ubicación la carpeta &lt;code&gt;phpmyadmin&lt;/code&gt; junto con todo su contenido.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verifica que estes ejecutando los servicios de tu entorno de desarrollo, es decir que tengas corriendo tanto tu servidor web como tu servidor de base de datos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configuración de phpMyAdmin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Abre tu editor de texto favorito y crea en la raíz de la carpeta &lt;code&gt;phpmyadmin&lt;/code&gt; un archivo llamado &lt;code&gt;config.inc.php&lt;/code&gt;, puedes copiar el contenido del archivo &lt;code&gt;config.sample.inc.php&lt;/code&gt; que se encuentra igualmente en la raíz de la carpeta &lt;code&gt;phpmyadmin&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ahora editaremos el archivo &lt;code&gt;config.inc.php&lt;/code&gt;, quiero que te des cuenta en estas líneas de código:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cd"&gt;/**
 * Servers configuration
 */&lt;/span&gt;
&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cd"&gt;/**
 * First server
 */&lt;/span&gt;
&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/* Authentication type */&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'auth_type'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'cookie'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/* Server parameters */&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'localhost'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'compress'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'AllowNoPassword'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si te das cuenta en esas líneas de código estamos configurando nuestro primer servidor en el que nos conectaremos, como te había mencionado, la ventaja de phpMyAdmin es que nos podemos conectar a múltiples servidores de bases de datos MySQL.&lt;/p&gt;

&lt;p&gt;En esa configuración nos hace falta agregar el usuario y la contraseña de nuestro servidor. Por lo general, en la mayoría de los entornos de desarrollo para PHP viene configurado por defecto en el servidor de bases de datos MySQL, un usuario &lt;strong&gt;"root"&lt;/strong&gt; sin contraseña.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Debes tomar en cuenta que se trata solamente de tu entorno de desarrollo en tu máquina local, por lo que tener un usuario &lt;strong&gt;"root"&lt;/strong&gt; sin contraseña esta bien, pero no en un entorno en producción, en el que debes considerar unas configuraciones extras de seguridad para tus bases de datos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por lo que las líneas ahora quedarían de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cd"&gt;/**
 * Servers configuration
 */&lt;/span&gt;
&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cd"&gt;/**
 * First server
 */&lt;/span&gt;
&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/* Authentication type */&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'auth_type'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'config'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cm"&gt;/* Server parameters */&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'root'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'compress'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Servers'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'AllowNoPassword'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bueno te explico los cambios que se hicieron, el primero es el cambio en el valor de &lt;code&gt;$cfg['Servers'][$i]['auth_type']&lt;/code&gt; a &lt;code&gt;config&lt;/code&gt;, esto evita estar introduciendo a cada rato el usuario y contraseña en la pantalla de inicio de sesión en phpMyAdmin.&lt;/p&gt;

&lt;p&gt;Luego el valor en &lt;code&gt;$cfg['Servers'][$i]['host']&lt;/code&gt; se cambio a &lt;code&gt;127.0.0.1&lt;/code&gt;, esto garantiza que nos conectemos correctamente a nuestro servidor local.&lt;/p&gt;

&lt;p&gt;Ahora en &lt;code&gt;$cfg['Servers'][$i]['user']&lt;/code&gt; ponemos el usuario para conectarnos a nuestro servidor de base de datos, si tienes uno diferente a &lt;strong&gt;"root"&lt;/strong&gt;, cambialo en su lugar. En &lt;code&gt;$cfg['Servers'][$i]['password']&lt;/code&gt; pon la contraseña de tu servidor local, como te habia mencionado por lo general en un entorno local el usuario root no tiene contraseña, si manejas otro usuario o le pusiste contraseña a tu usuario &lt;strong&gt;"root"&lt;/strong&gt; ponlo en su lugar.&lt;/p&gt;

&lt;p&gt;Por último en &lt;code&gt;$cfg['Servers'][$i]['AllowNoPassword']&lt;/code&gt; se cambio a &lt;code&gt;true&lt;/code&gt; ya que es muy probable que tu usuario &lt;strong&gt;"root"&lt;/strong&gt; no tenga contraseña y si no cambias su valor no te dejará conectarse sin una contraseña.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ya que tenemos todas nuestras configuraciones listas, es tiempo de probar en el navegador que todo funcione correctamente. Abre tu navegador y escribe la dirección hacia phpMyAdmin, si usas host virtuales en tu entorno de desarrollo, muy probablemente entres a una dirección como esta &lt;strong&gt;phpmyadmin.test&lt;/strong&gt;, en caso de que no manejes host virtuales, muy probablemente entres a &lt;strong&gt;localhost/phpmyadmin&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verás enseguida la interfaz de administración de phpMyAdmin, ahora podrás interacturar con todas tus bases de datos y probar todas las ventajas que nos ofrece.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y de esa manera es como tienes desde tu navegador una herramienta para administrar tus bases de datos en tu entorno de desarrollo.&lt;/p&gt;

&lt;p&gt;Como nota adicional quiero decirte que no descartes la posibilidad de aprender o seguir utilizando tu linea de comandos para administrar tu servidor de base de datos, ya que posiblemente en algún momento vas a interactuar con algún servidor de producción que no precisamente cuenta con una interfaz gráfica, si no que todo es a través de comandos.&lt;/p&gt;

&lt;p&gt;Cuéntame en los comentarios, ¿Ya conocías phpMyAdmin?, ¿Qué cliente de base de datos usas en tu día a día para administrarlas?&lt;/p&gt;

&lt;p&gt;No dudes en compartir este post si te ha parecido genial, y dime que te gustaría en próximos posts, estaré encantado de compartir contigo para que aprendamos juntos.&lt;/p&gt;

</description>
      <category>php</category>
      <category>phpmyadmin</category>
      <category>mysql</category>
      <category>mariadb</category>
    </item>
    <item>
      <title>Roles en proyectos de software</title>
      <dc:creator>Jonathan Pumares</dc:creator>
      <pubDate>Mon, 08 Nov 2021 17:09:03 +0000</pubDate>
      <link>https://forem.com/iamjonathanpumares/roles-en-proyectos-de-software-3p80</link>
      <guid>https://forem.com/iamjonathanpumares/roles-en-proyectos-de-software-3p80</guid>
      <description>&lt;p&gt;En la etapa de inicio de un proyecto necesitamos identificar los roles que ayudarán en el éxito de un proyecto de software.&lt;/p&gt;

&lt;p&gt;Estos roles pueden dividirse en dos grupos: equipo creativo y lideres técnicos.&lt;/p&gt;

&lt;p&gt;Cabe aclarar que dependiendo del tipo de proyecto y presupuesto, una persona puede ocupar varios roles dentro del equipo.&lt;/p&gt;

&lt;p&gt;Describiremos cada uno de estos roles, empezando por el equipo creativo, en donde su principal tarea es construir el software que usarán los usuarios o personas interesadas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Equipo creativo
&lt;/h2&gt;

&lt;p&gt;El equipo creativo es el encargado de dar vida al software desde la etapa de diseño, pasando por el desarrollo, pruebas y la implementación de la solución. Este no es un proceso que se realice una sola vez, es un proceso iterativo que requiere feedback de los usuarios para mejorar el producto.&lt;/p&gt;

&lt;h3&gt;
  
  
  UI/UX Designers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HY4HdiY---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5dx7pcbgvd5c9b6nnd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HY4HdiY---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o5dx7pcbgvd5c9b6nnd4.png" alt="UI/UX Designers" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Son las personas encargadas de diseñar la interfaz de usuario y de hacer los primeros prototipos a nivel visual de la aplicación.&lt;/p&gt;

&lt;p&gt;Están en constante comunicación con los clientes o usuarios de la aplicación para recibir retroalimentación de si van por el camino correcto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Front-end developers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I17F8kaG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttg9vfjklgr248kcbb94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I17F8kaG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ttg9vfjklgr248kcbb94.png" alt="Front-end developers" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Son las personas encargadas del aspecto visual de la aplicación, de hacer realidad los diseños hechos por los diseñadores y de darle interactividad a los componentes mostrados al usuario, como botones, formularios, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend developers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hTEcQNFi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbo4bpx1bwaj2rnsgw9s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hTEcQNFi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbo4bpx1bwaj2rnsgw9s.png" alt="Backend developers" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Son las personas encargadas de la lógica de negocios de la aplicación, de trabajar con servidores y bases de datos. Se aseguran de guardar, consultar y proteger los datos, hacen posible que la aplicación funcione a nivel operativo usando lenguajes de programación como Python, PHP, .NET, Java, por mencionar algunos.&lt;/p&gt;

&lt;h3&gt;
  
  
  DevOps
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---jOUqxuc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdif6kuexndjx4ujzd2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---jOUqxuc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdif6kuexndjx4ujzd2f.png" alt="DevOps" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es el equipo encargado de implementar toda la infraestructura que hace posible mantener funcionando la aplicación para los usuarios, trabajan con servidores, sistemas operativos y se encargan de la seguridad informática de la aplicación.&lt;/p&gt;

&lt;p&gt;Es posible que un Backend developer haga trabajo de Devops ya que comparten conocimientos en común cómo los lenguajes de programación, manejo de servidores y sistemas operativos, uso de la consola, entre otros.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Roadmaps
&lt;/h2&gt;

&lt;p&gt;Si quieres conocer el roadmap o la ruta que debes seguir para convertirte en desarrolladora o desarrollador web, te comparto el siguiente recurso para que puedas escoger entre Front-end, Backend y/o DevOps&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3FtlWfbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/he4zzn5xjuybxa39cwwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3FtlWfbp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/he4zzn5xjuybxa39cwwy.png" alt="Alt Text" width="880" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/frontend"&gt;Ruta Front-end developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/backend"&gt;Ruta Backend developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/devops"&gt;Ruta DevOps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lideres técnicos
&lt;/h2&gt;

&lt;p&gt;Parte del proceso creativo de un proyecto es guiarlo por el camino correcto, de hacer cumplir con los entregables del proyecto y, del crecimiento y motivación del equipo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stakeholders
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kQHJDRh1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arwbvy5axoazmc9r7p8j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kQHJDRh1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arwbvy5axoazmc9r7p8j.png" alt="Stakeholders" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Son todas aquellas personas interesadas en la realización del proyecto, y en la mayoría de los casos quienes manejan el presupuesto. Aquí entran los dueños o directivos de la empresa que tienen una amplia visión del negocio y un gran impacto en la realización del mismo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Product Owner
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iThPIedi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hk5gq4syfmtlwb8pouzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iThPIedi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hk5gq4syfmtlwb8pouzs.png" alt="Product Owner" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es la persona encargada de hacer cumplir con los entregables del proyecto y de definir nuevos requerimientos para la siguiente iteración. Debe conocer el modelo de negocio y esta en constante comunicación con el equipo creativo para revisar que se cumplan con dichos requerimientos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Product Manager
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LBmIhQC7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3cjlfj4icjtvsuz0y4f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LBmIhQC7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3cjlfj4icjtvsuz0y4f2.png" alt="Product Manager" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es una persona experta en tecnología y líder del equipo creativo, se encarga de lidiar con los obstáculos que le impiden a su equipo avanzar y de cumplir con las fechas de entrega establecidas. De igual manera sabe transformar las ideas de negocio en tecnología y de supervisar que se cumpla con cada iteración.&lt;/p&gt;

&lt;p&gt;Cuéntame en los comentarios, ¿Qué otros roles consideras importantes en proyectos de software?&lt;/p&gt;

</description>
      <category>equipos</category>
      <category>proyectos</category>
      <category>ingenieria</category>
      <category>software</category>
    </item>
    <item>
      <title>Configura tu entorno de desarrollo de manera profesional con Python y Django</title>
      <dc:creator>Jonathan Pumares</dc:creator>
      <pubDate>Tue, 31 Aug 2021 22:45:02 +0000</pubDate>
      <link>https://forem.com/iamjonathanpumares/configura-tu-entorno-de-desarrollo-de-manera-profesional-con-python-y-django-335g</link>
      <guid>https://forem.com/iamjonathanpumares/configura-tu-entorno-de-desarrollo-de-manera-profesional-con-python-y-django-335g</guid>
      <description>&lt;p&gt;Configurar tu entorno de desarrollo de manera profesional te ayudará a ahorrarte mucho tiempo, y en esta ocasión veremos como configurar tu entorno de desarrollo para que trabajes con Python y Django desde Visual Studio Code, el editor de texto favorito para muchos.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es Django?
&lt;/h2&gt;

&lt;p&gt;Django es un framework de Python para desarrollo web, que nos permite crear y mantener aplicaciones web de una manera rápida, segura y escalable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requerimientos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Instalar la &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python" rel="noopener noreferrer"&gt;extensión de Python&lt;/a&gt; para VS Code&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;Python 3.6 o superior&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configura un repositorio de Git en tu proyecto
&lt;/h2&gt;

&lt;p&gt;Git es una herramienta esencial para cualquier proyecto de software, que permite compartir código, participar en un proyecto open source o manejar las versiones de tu aplicación.&lt;/p&gt;

&lt;p&gt;Es por ello que te invito a usar Git en tus proyectos, y en este no será la excepción, vamos a inicializar un repositorio de Git, creando primero una carpeta para el proyecto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;En tu sistema de archivos, crea una carpeta para tu proyecto, puedes llamarla como tu quieras, en este ejemplo la llamaremos &lt;code&gt;proyecto_django&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Abre tu consola desde la ubicación de tu carpeta &lt;code&gt;proyecto_django&lt;/code&gt; y ejecuta el siguiente comando para inicializar un repositorio de Git:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git init


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;El siguiente paso es crear un archivo &lt;code&gt;.gitignore&lt;/code&gt;, que permitirá ignorar archivos que no queremos darle un seguimiento a través del sistema control de versiones, estos pueden ser archivos de configuración, que contienen datos sensibles como contraseñas, archivos binarios, como imágenes, ya que suelen ser muy pesados, archivos de compilación de Python (&lt;code&gt;.pyc&lt;/code&gt;), etc.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Abre la carpeta de tu proyecto desde Visual Studio Code, ya sea ejecutando el comando &lt;code&gt;code .&lt;/code&gt; desde tu consola o abriendo Visual Studio Code y en la opción &lt;strong&gt;File &amp;gt; Open Folder&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Crea el archivo &lt;code&gt;.gitignore&lt;/code&gt; en la raíz de la carpeta del proyecto, y no olvides agregar el punto (&lt;code&gt;.&lt;/code&gt;) al principio del nombre. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ¿Qué contendrá este archivo .gitignore?
&lt;/h3&gt;

&lt;p&gt;El archivo &lt;code&gt;.gitignore&lt;/code&gt; contendrá una lista de todos los archivos que vamos a ignorar, y para crear esa lista nos apoyaremos de la página &lt;a href="https://gitignore.io" rel="noopener noreferrer"&gt;https://gitignore.io&lt;/a&gt; que nos facilitará la creación de este archivo pasándole un conjunto de etiquetas de todas las herramientas que utilizaremos.&lt;/p&gt;

&lt;p&gt;Para este caso, pasamos las etiquetas &lt;code&gt;VisualStudioCode&lt;/code&gt;, &lt;code&gt;Python&lt;/code&gt; y &lt;code&gt;Django&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jckauc5ouzygp2dta1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jckauc5ouzygp2dta1u.png" alt="Creando el archivo .gitignore"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Damos clic al botón &lt;strong&gt;Create&lt;/strong&gt; y enseguida nos aparecerá todo un conjunto de archivos que son utilizados por estas herramientas, pero que no es necesario darles un seguimiento en nuestro repositorio. Copia el contenido y pégalo en tu archivo &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crear un entorno virtual para nuestro proyecto de Django
&lt;/h2&gt;

&lt;p&gt;Un entorno virtual nos permitirá instalar todos los paquetes y librerías necesarias para tu proyecto de manera independiente, es decir, podremos probar distintas versiones de Django sin entrar en conflicto con otros proyectos. Piensa en un entorno virtual como una máquina virtual, capaz de aislar todos los paquetes instalados dentro de ese entorno virtual.&lt;/p&gt;

&lt;p&gt;Ahora vayamos a la creación del entorno virtual:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de tu carpeta principal del proyecto, desde la línea de comandos, ejecuta el siguiente comando para crear un entorno virtual llamado &lt;code&gt;venv&lt;/code&gt; (asegurate de tener instalado Python):&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# Linux&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;python3-venv &lt;span class="c"&gt;# En caso necesario de no contar con python3-venv&lt;/span&gt;
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv

&lt;span class="c"&gt;# macOS&lt;/span&gt;
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv

&lt;span class="c"&gt;# Windows&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;En Visual Studio Code tenemos que seleccionar el intérprete de Python que se utilizará para ejecutar nuestro proyecto. Ahí es donde entra el entorno virtual que acabamos de crear. Prácticamente le decimos a VS Code, quiero que utilices la versión de Python que tengo dentro de mi entorno virtual junto con todos sus paquetes instalados.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de VS Code, vamos a la opción &lt;strong&gt;View &amp;gt; Command Palette&lt;/strong&gt; y seleccionamos el comando &lt;strong&gt;Python: Select Interpreter&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgjhixzu334zc3qgblrn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgjhixzu334zc3qgblrn.png" alt="Python: Select Interpreter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El comando mostrará una lista de los intérpretes disponibles que VS Code puede localizar automáticamente. Desde la lista, selecciona el entorno virtual que se encuentra dentro de la carpeta del proyecto:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeack7joxn6k1l8crui3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeack7joxn6k1l8crui3.png" alt="Select virtual environment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta este momento solamente hemos creado nuestro entorno virtual, pero aún no lo usamos, para ello tenemos que activarlo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Y aquí viene la magia de VS Code, vamos a abrir una línea de comandos desde la opción &lt;strong&gt;Terminal &amp;gt; New Terminal&lt;/strong&gt;, esto abre una consola integrada en nuestro editor y automáticamente activa el entorno virtual ejecutando el script de activación.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Del lado izquierdo visualizarás la barra de estado de VS Code indicando que estamos utilizando un entorno virtual.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptu8qw3j7pkw6p04clar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptu8qw3j7pkw6p04clar.png" alt="Entorno virtual activado"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Actualizando y utilizando pip
&lt;/h2&gt;

&lt;p&gt;Por defecto Python ya cuenta con un conjunto de funcionalidades integradas listas para usar, que se encuentran agrupadas en módulos. De seguro has usado el módulo &lt;code&gt;random&lt;/code&gt; para generar números aleatorios, pero que pasa con Django.&lt;/p&gt;

&lt;p&gt;Ya que Django es un paquete que no se encuentra directamente dentro de Python tenemos que instalarlo de manera externa.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo instalamos Django?
&lt;/h3&gt;

&lt;p&gt;Para instalar Django necesitamos de un gestor de dependencias o en otras palabras de un instalador de paquetes, y el más popular en Python es &lt;strong&gt;PIP&lt;/strong&gt; (Package Installer for Python) ya que viene integrado junto con Python en el momento de la instalación.&lt;/p&gt;

&lt;p&gt;Si vienes de JavaScript de seguro conoces &lt;strong&gt;npm&lt;/strong&gt; y se te hará muy familiar los comandos a la hora de instalar paquetes con &lt;strong&gt;pip&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Un paso adicional antes de empezar a instalar paquetes, es tener actualizado &lt;strong&gt;pip&lt;/strong&gt; en nuestro entorno virtual, que si recuerdas ya se encuentra activado en la consola de VS Code, ejecuta el siguiente comando:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; pip


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Ahora procederemos a instalar Django en el entorno virtual:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

pip &lt;span class="nb"&gt;install &lt;/span&gt;django


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Puedes verificar que Django fue instalado con el siguiente comando:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

pip freeze


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Crear un proyecto de Django
&lt;/h2&gt;

&lt;p&gt;Ahora que ya tenemos instalado Django tenemos disponible el comando &lt;code&gt;django-admin&lt;/code&gt; que nos permitirá crear nuestro primer proyecto.&lt;/p&gt;

&lt;p&gt;Vamos a la consola de VS Code con tu entorno virtual activado y ejecuta el siguiente comando:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

django-admin startproject proyecto_django &lt;span class="nb"&gt;.&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;El punto (&lt;code&gt;.&lt;/code&gt;) al final del comando indica que el proyecto será creado en la carpeta actual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creando archivos de configuración para cada entorno
&lt;/h2&gt;

&lt;p&gt;En un entorno profesional de trabajo es ideal manejar un servidor diferente por cada etapa del proyecto, es decir, cuando realizamos cambios al código del proyecto, usamos un entorno de desarrollo, cuando el cliente prueba funcionalidades nuevas para aprobarlas, se usa un servidor de staging, y finalmente cuando la aplicación es accesible para todos, se usa un servidor de producción.&lt;/p&gt;

&lt;p&gt;Es por ello importante manejar archivos de configuración diferentes por cada entorno, ya que esas configuraciones serán diferentes para cada servidor, por lo que sería tedioso manejar un solo archivo y estar cambiando a cada rato cuando nos cambiamos de entorno.&lt;/p&gt;

&lt;p&gt;Django por defecto maneja toda la configuración del proyecto en un solo archivo (&lt;code&gt;proyecto_django/settings.py&lt;/code&gt;), pero ahora queremos manejar múltiples archivos de configuración por cada entorno manejado.&lt;/p&gt;

&lt;p&gt;Para ello vamos a agrupar todos esos archivos de configuración en un sola carpeta llamada &lt;code&gt;settings&lt;/code&gt;, creamos la carpeta dentro de la subcarpeta &lt;code&gt;proyecto_django&lt;/code&gt; y creamos la siguiente estructura de archivos:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

proyecto_django/settings
├── __init__.py
├── base.py
├── local.py
└── production.py


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Vamos a describir cada archivo de la carpeta &lt;code&gt;settings&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;__init__.py&lt;/code&gt;: Un archivo vacío que le dice a Python que esta carpeta se trata de un paquete.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;base.py&lt;/code&gt;: Todas las configuraciones en común entre entornos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;local.py&lt;/code&gt;: Contiene todas las configuraciones de tu entorno local (que incluyen las de &lt;code&gt;base.py&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;production.py&lt;/code&gt;: Configuraciones para el entorno de producción.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ¿Qué contenido tendrá base.py?
&lt;/h3&gt;

&lt;p&gt;Todas las configuraciones que no cambien entre los distintos entornos manejados, estará dentro del archivo &lt;code&gt;base.py&lt;/code&gt;. Como recomendación copia el contenido del archivo &lt;code&gt;settings.py&lt;/code&gt; y pegalo en &lt;code&gt;base.py&lt;/code&gt; luego ve identificando que configuraciones son distintas entre tus diferentes entornos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificando configuraciones que cambien entre entornos
&lt;/h2&gt;

&lt;p&gt;La primera configuración que podemos identificar es la siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# SECURITY WARNING: don't run with debug turned on in production!
&lt;/span&gt;&lt;span class="n"&gt;DEBUG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="n"&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;En un entorno local tener el modo &lt;code&gt;DEBUG&lt;/code&gt; activado te facilitará visualizar una página detallada de errores a la hora de codear. En un entorno de producción no queremos mostrarle a nuestros usuarios esos errores detallados, ya que contiene datos sensibles del servidor, por lo que estaríamos expuestos a detalles de seguridad.&lt;/p&gt;

&lt;p&gt;La variable de configuración &lt;code&gt;ALLOWED_HOSTS&lt;/code&gt; es una lista de hosts/nombres de dominio que nuestro sitio de Django puede servir. Si la variable &lt;code&gt;DEBUG&lt;/code&gt; es &lt;code&gt;True&lt;/code&gt; y &lt;code&gt;ALLOWED_HOSTS&lt;/code&gt; es una lista vacía se proporcionará acceso solamente a &lt;code&gt;['.localhost', '127.0.0.1', '[::1]']&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Por el momento copiamos esas dos variables de configuración y las pegamos en &lt;code&gt;local.py&lt;/code&gt; y &lt;code&gt;production.py&lt;/code&gt;, por ahora solamente cambiamos en el archivo &lt;code&gt;production.py&lt;/code&gt; la variable &lt;code&gt;DEBUG&lt;/code&gt; en &lt;code&gt;False&lt;/code&gt;. Ya podemos eliminar esas dos variables de configuración en el archivo &lt;code&gt;base.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;local.py&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# SECURITY WARNING: don't run with debug turned on in production!
&lt;/span&gt;&lt;span class="n"&gt;DEBUG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="n"&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;production.py&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# SECURITY WARNING: don't run with debug turned on in production!
&lt;/span&gt;&lt;span class="n"&gt;DEBUG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="n"&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora tenemos la variable de configuración &lt;code&gt;DATABASES&lt;/code&gt; que contiene las configuraciones para todas las bases de datos usadas con Django:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
&lt;/span&gt;
&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENGINE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.db.backends.sqlite3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BASE_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;db.sqlite3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;En un entorno local nos interesa manejar datos de prueba para verificar el funcionamiento de la aplicación, Django trae por defecto la configuración con una base de datos SQLite, que no es más que un simple archivo donde son guardados los datos.&lt;/p&gt;

&lt;p&gt;Para el entorno de producción, Django soporta múltiples motores de base de datos para usar, como MariaDB, MySQL, Oracle o PostgreSQL. El siguiente es un ejemplo para PostgreSQL (Recuerda tener instalado el driver correspondiente con el motor de base de datos):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENGINE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.db.backends.postgresql&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mydatabase&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mydatabaseuser&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PASSWORD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mypassword&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HOST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PORT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;5432&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Copia la variable de configuración &lt;code&gt;DATABASES&lt;/code&gt; y pegalo en tu archivo &lt;code&gt;local.py&lt;/code&gt;, para el caso de &lt;code&gt;production.py&lt;/code&gt; puedes utilizar por ahora el ejemplo para PostgreSQL. Ya puedes eliminar la configuración para la variable &lt;code&gt;DATABASES&lt;/code&gt; en el archivo &lt;code&gt;base.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Por último tenemos la variable de configuración &lt;code&gt;STATIC_URL&lt;/code&gt; que es la URL a usar para hacer referencia a los archivos estáticos, puede tener diferentes valores dependiendo del entorno, pero por ahora usaremos el mismo valor para los archivos &lt;code&gt;local.py&lt;/code&gt; y &lt;code&gt;production.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ya para finalizar tenemos que importar todas las variables de configuración del archivo &lt;code&gt;base.py&lt;/code&gt; a &lt;code&gt;local.py&lt;/code&gt; y &lt;code&gt;production.py&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.base&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Nuestros archivos de configuración se verán de la siguiente manera:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;base.py&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Django settings for proyecto_django project.

Generated by &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django-admin startproject&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; using Django 3.2.6.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="c1"&gt;# Build paths inside the project like this: BASE_DIR / 'subdir'.
&lt;/span&gt;&lt;span class="n"&gt;BASE_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;


&lt;span class="c1"&gt;# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
&lt;/span&gt;
&lt;span class="c1"&gt;# SECURITY WARNING: keep the secret key used in production secret!
&lt;/span&gt;&lt;span class="n"&gt;SECRET_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;my-secret-key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;


&lt;span class="c1"&gt;# Application definition
&lt;/span&gt;
&lt;span class="n"&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.admin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.contenttypes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.sessions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.messages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.staticfiles&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;MIDDLEWARE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.middleware.security.SecurityMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.sessions.middleware.SessionMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.middleware.common.CommonMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.middleware.csrf.CsrfViewMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth.middleware.AuthenticationMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.messages.middleware.MessageMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.middleware.clickjacking.XFrameOptionsMiddleware&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;ROOT_URLCONF&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;proyecto_django.urls&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="n"&gt;TEMPLATES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BACKEND&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.template.backends.django.DjangoTemplates&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DIRS&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;APP_DIRS&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;OPTIONS&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;context_processors&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.template.context_processors.debug&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.template.context_processors.request&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth.context_processors.auth&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.messages.context_processors.messages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;WSGI_APPLICATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;proyecto_django.wsgi.application&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;


&lt;span class="c1"&gt;# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
&lt;/span&gt;
&lt;span class="n"&gt;AUTH_PASSWORD_VALIDATORS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth.password_validation.MinimumLengthValidator&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth.password_validation.CommonPasswordValidator&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth.password_validation.NumericPasswordValidator&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="c1"&gt;# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
&lt;/span&gt;
&lt;span class="n"&gt;LANGUAGE_CODE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;en-us&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="n"&gt;TIME_ZONE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;UTC&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="n"&gt;USE_I18N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="n"&gt;USE_L10N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="n"&gt;USE_TZ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="c1"&gt;# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
&lt;/span&gt;
&lt;span class="n"&gt;DEFAULT_AUTO_FIELD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.db.models.BigAutoField&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;local.py&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.base&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="c1"&gt;# SECURITY WARNING: don't run with debug turned on in production!
&lt;/span&gt;&lt;span class="n"&gt;DEBUG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;

&lt;span class="n"&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;


&lt;span class="c1"&gt;# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
&lt;/span&gt;
&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENGINE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.db.backends.sqlite3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BASE_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;db.sqlite3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
&lt;/span&gt;
&lt;span class="n"&gt;STATIC_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/static/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;production.py&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.base&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="c1"&gt;# SECURITY WARNING: don't run with debug turned on in production!
&lt;/span&gt;&lt;span class="n"&gt;DEBUG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="n"&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;


&lt;span class="c1"&gt;# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
&lt;/span&gt;
&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENGINE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.db.backends.postgresql&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mydatabase&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mydatabaseuser&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PASSWORD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mypassword&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HOST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PORT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;5432&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
&lt;/span&gt;
&lt;span class="n"&gt;STATIC_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/static/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Modularizando la variable INSTALLED_APPS
&lt;/h2&gt;

&lt;p&gt;Dentro del archivo &lt;code&gt;base.py&lt;/code&gt; te encontrarás con la variable de configuración &lt;code&gt;INSTALLED_APPS&lt;/code&gt; que es una lista de todas las aplicaciones que están habilitadas para el proyecto. Django maneja el concepto de &lt;strong&gt;aplicación&lt;/strong&gt; como un conjunto de funcionalidades únicas y que se pueden reutilizar en otros proyectos.&lt;/p&gt;

&lt;p&gt;Si miras la lista verás que un proyecto de Django trae por defecto todo un conjunto de funcionalidades listas para usar, como el sitio de administración de Django, el sistema de autenticación, el manejo de sesiones, etc.&lt;/p&gt;

&lt;p&gt;Todos estos paquetes pertenecen a Django, pero sorpresa, podemos instalar paquetes de terceros, o mejor aún crear nuestros propios paquetes. Una buena práctica es separar estos diferentes tipos de paquetes en distintas variables.&lt;/p&gt;

&lt;p&gt;Para los paquetes de Django declaramos la variable &lt;code&gt;DJANGO_APPS&lt;/code&gt;, para los paquetes de terceros la variable &lt;code&gt;THIRD_PARTY_APPS&lt;/code&gt; y para paquetes propios la variable &lt;code&gt;LOCAL_APPS&lt;/code&gt;, las variables se verán de la siguiente manera:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# Application definition
&lt;/span&gt;
&lt;span class="n"&gt;DJANGO_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.admin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.contenttypes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.sessions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.messages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.contrib.staticfiles&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;THIRD_PARTY_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="n"&gt;LOCAL_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="n"&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DJANGO_APPS&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;THIRD_PARTY_APPS&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;LOCAL_APPS&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Actualiza el valor por defecto de DJANGO_SETTINGS_MODULE
&lt;/h2&gt;

&lt;p&gt;Ahora que cambiamos el archivo de configuración &lt;code&gt;settings.py&lt;/code&gt; que trae Django por defecto a múltiples archivos de configuración por cada entorno, tenemos que actualizar los archivos &lt;code&gt;asgi.py&lt;/code&gt;, &lt;code&gt;wsgi.py&lt;/code&gt; y &lt;code&gt;manage.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cambiamos&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setdefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DJANGO_SETTINGS_MODULE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;proyecto_django.settings&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;por&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setdefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DJANGO_SETTINGS_MODULE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;proyecto_django.settings.local&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Esto quiere decir que ahora Django utilizará el archivo de configuración &lt;code&gt;local.py&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Para un entorno de producción tienes que configurar la variable de entorno &lt;code&gt;DJANGO_SETTINGS_MODULE&lt;/code&gt; para apuntar hacia el archivo de configuración &lt;code&gt;proyecto_django.settings.production&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Creando la base de datos de desarrollo
&lt;/h2&gt;

&lt;p&gt;Ya que se trata de un proyecto inicial de Django, por ahora no tenemos ningún modelo creado, pero tenemos los modelos que trae Django por defecto, ejecuta el siguiente comando para crear una base de datos de desarrollo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

python manage.py migrate


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;De inmediato visualizarás dentro de la subcarpeta &lt;code&gt;proyecto_django&lt;/code&gt; un archivo &lt;code&gt;db.sqlite3&lt;/code&gt; en donde se guardarán los datos para el entorno local.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mantener algunas configuraciones de manera secreta
&lt;/h2&gt;

&lt;p&gt;En algunas variables de configuración tendrás valores que no vas a querer compartir o subir a tu repositorio por razones de seguridad o porque simplemente solo funcionarán para tu entorno de desarrollo, estas variables pueden ser &lt;code&gt;SECRET_KEY&lt;/code&gt; que no debemos usar la misma para producción y para desarrollo, &lt;code&gt;DATABASES&lt;/code&gt; si estas manejando de manera local una base de datos PostgreSQL, en donde tendrás que especificar nombre de usuario, contraseña del usuario, nombre de la base de datos, puerto, etc.&lt;/p&gt;

&lt;p&gt;Estas son solo algunas variables que pueden cambiar sus valores y necesitas mantenerlas secretas, es decir, no darle seguimiento a través del sistema control de versiones, o en caso de que otras personas están colaborando en el proyecto y van a configurar su propio entorno de desarrollo.&lt;/p&gt;

&lt;p&gt;Para ello vamos a instalar una librería con &lt;strong&gt;pip&lt;/strong&gt; llamada &lt;strong&gt;Python Decouple&lt;/strong&gt; que nos ayudará a separar esos valores en un archivo &lt;code&gt;.env&lt;/code&gt;, ejecuta el siguiente comando en tu consola:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

pip &lt;span class="nb"&gt;install &lt;/span&gt;python-decouple


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora crea un archivo &lt;code&gt;.env&lt;/code&gt; en la raíz de tu proyecto con el siguiente contenido:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

SECRET_KEY=my-secret-key
DB_NAME=django
DB_USER=root
DB_PASSWORD=
DB_HOST=127.0.0.1
DB_PORT=5432


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;El archivo &lt;code&gt;.env&lt;/code&gt; no se agregará al historial de cambios en el sistema control de versiones, ya que en un paso anterior lo hemos agregado en el &lt;code&gt;.gitignore&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Necesitamos importar la librería en el archivo &lt;code&gt;base.py&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;decouple&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Cambia el valor de &lt;code&gt;SECRET_KEY&lt;/code&gt; por lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;SECRET_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;En caso de que quieras manejar un motor de base de datos diferente en tu entorno local, en lugar del archivo de SQLite que maneja Django por defecto, tendrás que configurar las variables correspondientes en tu archivo &lt;code&gt;local.py&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ENGINE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;django.db.backends.postgresql&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DB_NAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DB_USER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PASSWORD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HOST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DB_HOST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PORT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DB_PORT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Recuerda cambiar a los valores correctos según tu entorno en el archivo &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Convirtiendo a otros tipos de datos
&lt;/h3&gt;

&lt;p&gt;Todos los valores que se leen del archivo &lt;code&gt;.env&lt;/code&gt; son manejados como una cadena de texto, pero en caso de que quieras configurar una variable como &lt;code&gt;EMAIL_PORT&lt;/code&gt;, manejada por Django para el envió de correos, esta debe ser configurada como un entero, por lo que podemos pasarle el argumento &lt;code&gt;cast&lt;/code&gt; a la función &lt;code&gt;config()&lt;/code&gt; para transformar el valor de cadena como un número entero:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cast&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Manejando valores por defecto
&lt;/h3&gt;

&lt;p&gt;Un argumento extra que le podemos pasar a la función &lt;code&gt;config()&lt;/code&gt; es &lt;code&gt;default&lt;/code&gt;, que definirá un valor por defecto en caso de que la variable de entorno no este definida en el archivo &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cast&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora no es necesario que la variable de entorno &lt;code&gt;EMAIL_PORT&lt;/code&gt; este definida en el archivo &lt;code&gt;.env&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Compartir las variables de entorno definidas para el proyecto
&lt;/h3&gt;

&lt;p&gt;Seguramente te preguntarás porque vamos a compartir algo que al principio mencionamos que mantendríamos en secreto, pues no precisamente vamos a compartir los valores, sino, más bien las variables que necesita el proyecto para funcionar correctamente.&lt;/p&gt;

&lt;p&gt;Si una persona se une al proyecto no sabrá como configurar y ejecutar la aplicación de manera correcta, por lo que debemos dejar un ejemplo de las variables que tiene que configurar. Para ello vamos a crear un archivo &lt;code&gt;.env.example&lt;/code&gt; en la raíz del proyecto que contendrá datos de ejemplo, esto servirá como referencia para crear el archivo &lt;code&gt;.env&lt;/code&gt; con los valores del entorno apropiado.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;El archivo &lt;code&gt;.env.example&lt;/code&gt; si se agregará al repositorio, ya que solo contendrá datos de ejemplo con las variables de entorno para crear el archivo &lt;code&gt;.env&lt;/code&gt;, y recuerda cambiar los valores para que tu entorno funcione correctamente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Creando nuestra primera app
&lt;/h2&gt;

&lt;p&gt;Recuerdas que te había mencionado que podíamos crear nuestros propios paquetes, pues hemos llegado a ese momento.&lt;/p&gt;

&lt;p&gt;Si ejecutamos el siguiente comando, Django va a crear una app en la raíz del proyecto:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;startapp&lt;/span&gt; &lt;span class="n"&gt;home&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Aunque esto es correcto, si el proyecto va creciendo y se van creando más apps, se tendrá en la raíz del proyecto una lista interminable de carpetas.&lt;/p&gt;

&lt;p&gt;Entonces vamos a aplicar desde el inicio del proyecto buenas prácticas. Crea en la raíz del proyecto una carpeta llamada &lt;code&gt;apps&lt;/code&gt;, aquí englobaremos todas las apps creadas.&lt;/p&gt;

&lt;p&gt;Si ejecutaste el comando anterior recuerda eliminar la carpeta &lt;code&gt;home&lt;/code&gt; de la raíz del proyecto.&lt;/p&gt;

&lt;p&gt;Desde tu línea de comandos en VS Code y con tu entorno virtual activado, ingresa a la carpeta &lt;code&gt;apps&lt;/code&gt; y ejecuta el siguiente comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;cd &lt;/span&gt;apps
django-admin startapp home


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Visualizarás que dentro de la carpeta &lt;code&gt;apps&lt;/code&gt; se ha creado una subcarpeta &lt;code&gt;home&lt;/code&gt; con la siguiente estructura:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

apps
└── home
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Vamos a explicar rápidamente cada archivo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;views.py&lt;/code&gt;: Contiene la lógica o funcionalidad de la aplicación.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;models.py&lt;/code&gt;: Contiene un conjunto de clases que definen la estructura de datos a utilizar por la aplicación.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;migrations&lt;/code&gt;: Una carpeta que es usada por Django para manejar las versiones de la base de datos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;apps.py&lt;/code&gt;: Configuraciones propias de la aplicación&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;admin.py&lt;/code&gt;: Creación de la interfaz administrativa para el manejo de modelos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests.py&lt;/code&gt;: Creación de pruebas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Creando nuestra primera vista
&lt;/h3&gt;

&lt;p&gt;Modifica el archivo &lt;code&gt;home/views.py&lt;/code&gt; para crear una vista que nos retorne un saludo como respuesta:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.http&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HttpResponse&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, Django!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora crea un archivo &lt;code&gt;home/urls.py&lt;/code&gt; para definir las diferentes rutas asociadas a las vistas:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;

&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;home&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Dentro de la subcarpeta &lt;code&gt;proyecto_django&lt;/code&gt; hay un archivo &lt;code&gt;urls.py&lt;/code&gt; que es el encargado de manejar el enrutamiento dentro de la aplicación. Una buena práctica es crear un archivo &lt;code&gt;urls.py&lt;/code&gt; dentro de cada app, con la idea de modularizar las rutas de cada aplicación.&lt;/p&gt;

&lt;p&gt;En el archivo &lt;code&gt;proyecto_django/urls.py&lt;/code&gt; tienen que incluirse las rutas de cada app:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;

&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apps.home.urls&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;admin/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Debugging con Django
&lt;/h2&gt;

&lt;p&gt;Para probar nuestra aplicación simplemente ejecutamos el siguiente comando:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

python manage.py runserver


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Abre un navegador y visita &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt; para ver una página que renderiza "Hello, Django!".&lt;/p&gt;

&lt;p&gt;Seguramente te estarás preguntando si existe una manera más fácil de ejecutar el servidor de desarrollo, y has llegado a la parte indicada.&lt;/p&gt;

&lt;p&gt;Vamos a crear algo genial en VS Code que ayudará tanto a correr la aplicación como para realizar debugging.&lt;/p&gt;

&lt;p&gt;Cambia el modo &lt;strong&gt;Run and Debug&lt;/strong&gt; en el lado izquierdo de tu barra de actividad y verás el mensaje "To customize Run and Debug create a launch.json file", si das clic en el enlace &lt;strong&gt;create a launch.json file&lt;/strong&gt; esto va a crear un archivo &lt;code&gt;launch.json&lt;/code&gt; que contendrá las configuraciones de depuración.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fn8lko30kk4sxyc2f3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fn8lko30kk4sxyc2f3k.png" alt="Run and Debug"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Selecciona el enlace y VS Code te solicitará una configuración para depuración. Selecciona &lt;strong&gt;Django&lt;/strong&gt; y automáticamente VS Code crea el archivo &lt;code&gt;launch.json&lt;/code&gt; con las configuraciones para ejecutar la aplicación de Django. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvl1no5asdb7srl3zo6ao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvl1no5asdb7srl3zo6ao.png" alt="Django debug configuration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visualiza la configuración que se genero:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "args": [
                "runserver"
            ],
            "django": true
        }
    ]
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Prácticamente esta configuración dice que ejecute &lt;code&gt;"${workspaceFolder}/manage.py"&lt;/code&gt; con los argumentos en la lista &lt;code&gt;args&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vamos ahora a probar la configuración, selecciona la opción &lt;strong&gt;Run &amp;gt; Start Debugging&lt;/strong&gt;, o selecciona la flecha verde para ejecutar el servidor de desarrollo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod05aubjlpw6y8vems9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod05aubjlpw6y8vems9n.png" alt="Start Debugging Django"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Abre el navegador, visita &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt; y verifica que la aplicación se ejecuta correctamente. De ahora en adelante puedes usar &lt;strong&gt;Run &amp;gt; Start Debugging&lt;/strong&gt; en cualquier momento para probar la aplicación.&lt;/p&gt;

&lt;p&gt;Y hemos llegado al final de este post, cuéntame en los comentarios que te ha parecido, si tienes dudas o sugerencias con respecto al contenido, estoy seguro que aprenderemos juntos, ya que la mejor manera de aprender es enseñando.&lt;/p&gt;

&lt;p&gt;Por último dime que te gustaría ver en próximos posts y házmelo saber a través de mis redes sociales.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.facebook.com/jepumares" rel="noopener noreferrer"&gt;Sígueme en Facebook&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/3jonapumares" rel="noopener noreferrer"&gt;Sígueme en Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
