¡Hola! Ahora vamos a aplicar todo lo aprendido durante el curso en la creación de un proyecto que usará MongoDB. ¡No te preocupes! Este módulo es completamente opcional, si quieres puedes saltarte al siguiente módulo. El examen no incluye preguntas sobre este módulo 😉.
🐍 ¡Crearemos una pequeña API desarrollada con Python la cual simulará ser un mini Platzi! Esta es una aplicación backend que se comunicará con nuestra base de datos mediante el driver Pymongo. En esta clase aprenderás a cómo instalar y configurar todas las herramientas que necesitarás para trabajar el proyecto de PlatziMongo. En resumen, esto es lo que haremos:
Descargaremos el código base de nuestro proyecto desde GitHub.
Instalaremos Postman para facilitarnos interactuar con nuestra API.
Crearemos un entorno virtual con Python.
Instalaremos las dependencias de nuestro proyecto.
¡Estableceremos las configuraciones finales para que nuestro proyecto empiece a funcionar!
¡Así que vamos a ello!
Clonando el repositorio del proyecto
Lo primero que necesitamos hacer es clonar el repositorio del proyecto, esto lo puedes hacer con el siguiente comando en la carpeta de tu preferencia:
git clone https://github.com/AERC18/platzi-mongo
Este repositorio incluye el código base de nuestro proyecto, en las próximas clases nos encargaremos de completarlo añadiendo las consultas necesarias a nuestra base de datos.
Adicionalmente, puedes ver el código de cada clase en las diferentes ramas que incluye este proyecto. Puedes ver las ramas ejecutando el siguiente comando dentro de la carpeta del mismo:
git branch
Instalación de Postman
Ya que tenemos el código base de nuestra mini API descargado, ahora necesitamos una manera de comunicarnos con ella. Recuerda que este código que descargamos es de una aplicación backend que se comunicará con nuestra base de datos en Mongo, y como toda aplicación backend, esta necesita recibir solicitudes HTTP para realizar las acciones necesarias.
Podríamos hacer una aplicación frontend que se encargue de mandar estas solicitudes, o podríamos apoyarnos de herramientas como Postman que se encargan de mandar estas solicitudes hacia cualquier backend, así nos ahorramos el tener que programar una aplicación frontend 😉.
A continuación te explico los pasos para que descargues Postman:
Ejecuta el instalador, Postman se instalará y configurará automáticamente, tú solo espera.
¡Ya tienes instalado Postman! Te recomiendo crear una cuenta para usar Postman. Puedes registrarte por medio de las opciones que te da Postman cuando se abre, o puedes clicar en la opción "Skip an go to the app" para saltarte este paso:
Hasta este punto ya deberías tener el programa instalado en tu computadora. En Postman podemos crear algunas solicitudes HTTP de ejemplo y compartirlas con otras personas para que ellos solo tengan que ejecutarlas. Yo he creado algunas solicitudes de ejemplo para nuestro proyecto, a continuación te las comparto y te explico cómo importarlas en tu cliente de Postman:
Primero debemos seleccionar un Workspace dentro de Postman, para ello abrimos la pestaña "Workspace" y seleccionamos "My Workspace".
Damos click al botón "Continue" y ¡listo! Con eso ya deberías tener las solicitudes de prueba importadas en tu Postman, en las siguientes clases te mostraré cómo usarlas 😉.
Recuerda que puedes profundizar más en el funcionamiento de Postman en el Curso de Postman.
Creando un ambiente virtual para nuestro proyecto
Ahora que ya tenemos Postman instalado y nuestro código base descargado es necesario que instalemos las dependencias para el mismo. Para ello, como en todo buen proyecto con Python, crearemos un ambiente virtual. Es importante recalcar que para esto debes tener instalada una versión de Python superior a la versión 3.3. Puedes aprender a cómo instalar Python según tu sistema operativo en nuestro Curso Básico de Python 💪.
Para crear nuestro ambiente virtual debemos ejecutar este comando desde dentro de la carpeta de nuestro proyecto:
python3 -m venv venv
Con el ambiente creado, ahora debemos activarlo, para ello podemos hacerlo con el siguiente comando si estás en Windows:
.\venv\Scripts\activate
O con el siguiente comando, en caso de que estes en Linux o macOS:
source venv/bin/activate
Te puedes asegurar de que tu entorno virtual está activo viendo que a la izquierda de tu terminal aparece su nombre entre paréntesis. Para desactivar el ambiente virtual puedes lograrlo con el siguiente comando:
deactivate
Otra forma de crear ambientes virtuales con Python es mediante el uso de Anaconda. Puedes profundizar más en el tema de ambientes virtuales en el Curso de Python Intermedio, pero para este proyecto, con lo que te he explicado aquí basta 😉.
Instalación de las dependencias del proyecto
Ya que tenemos el ambiente virtual creado en nuestro proyecto debes activarlo para poder instalar las dependencias. Para instalarlas es tan simple como correr el siguiente comando asegurándote de que tu entorno virtual está activo:
pip3 install -r requirements.txt
En caso de que tengas algún error solo ejecuta el comando de nuevo, pip se encargará de solucionarlo en la primera incidencia.
Variables de entorno necesarias para ejecutar el proyecto
Por último, para que el proyecto se ejecute sin errores es necesario exportar las variables de entorno que se muestran a continuación, simplemente ejecuta cada una en tu terminal:
export FLASK_APP=platzi-api
export FLASK_ENV=development
export PLATZI_DB_URI="MONGO-URI"
Debes reemplazar MONGO-URI por la URI de MongoDB atlas en el siguiente formato:
Cuando hayas ejecutado todas las variables de entorno ejecuta el siguiente comando para que la aplicación empiece a correr:
flask run
De esta manera se ejecutará un servidor de desarrollo apuntando a http://127.0.0.1:5000 el cual contendrá nuestra API lista para empezar a trabajar 😉.
De esta forma terminamos la configuración de nuestro entorno de desarrollo. No olvides abrir el proyecto en tu editor de código preferido, en mi caso usaré Pycharm, pero tú puedes usar Visual Studio Code si así lo deseas.
Ingresar las variables necesarias para ejecutar el proyecto:
set FLASK_APP=platzi-apiset FLASK_ENV=developmentset PLATZI_DB_URI=“mongodb+srv://platzi-admin:password@curso-platzi-m0b9c.mongodb.net”
Corremos el servidor: flask run
Muchas gracias, me fue de mucha ayuda tu aporte.
Gracias @borisvargas, tu aporte me ha ayudado mucho :)
Para los usuarios de Windows las variables de entorno se definen de esta forma de esta forma:
Windows CMD:
set FLASK_APP=platzi-api
set FLASK_ENV=development
set PLATZI_DB_URI=“MONGO-URI”
De 10 este aporte!. A seguir con el curso.
saludos
Esta manera de configurar las variables de entorno si me funcionó, muchas gracias.
Poco didáctico, y para muchos usuarios problemático.
si.... pésima decisión dejar esta parte por escrito.
Creo que esto debió ser explicado en un video, y es por estas cosas que no recomendaría platzi
Hombre tanto como no recomendar no, pero si es cierto que deberian haber hecho video.
Se que es importante aprender y que no te den todo servido, pero se deben instalar dos aplicaciones adicionales que requieren conocimientos mas extensos y cuando uno solicita apoyo no veo respuesta, la mayoria estamos aprendiendo y he notado que existen una infinidad de comentarios que buscan apoyo sin resolver y debe ser algo que deben mejorar como Plataforma. He noto han sido bastantes los que han tenido problemas con esto, por lo que seria excelente que alguien pudiera editar esta sección del curso, o agregar documentación e identificar en que plataforma se trabajo las instrucciones anteriores.
😓😪
Tienes toda la razón, además que te expliquen o ayuden a resolver una duda también sirve de aprendizaje. Y en el poco tiempo que llevo en platzi he notado que en muchos cursos independiente del nivel que tengan hace falta el apoyo de los instructores o ayudantes de los cursos a las preguntas que muchos hacemos. Lamentablemente he visto poco de eso, en comparación con otras plataformas similares a platzi en donde los instructores o ayudantes del curso no tardan más de 48 horas en dar soluciones. Una lástima :c
Hola @David Borrayo es comprensible tu preocupación, también estuve en tu situación y se lo frustrante que es, sin embargo te animo a que continúes, poco a poco iras conectando conocimientos, si me permites te daré algunos consejos que me han ayudado en el proceso autodidacta:
Empieza por los fundamentos y las bases: Cursos como este son de gran ayuda para que aprendas a manejar una herramienta como lo es MongoDB, sin embargo ten presente que hay cursos más fundamentales como el de fundamentos de bases de datos, el curso profesional de Git y GitHub y si tu enfoque es backend o data science aprende un lenguaje como python, javascript, php, etc.
Cada uno tenemos un ritmo de aprendizaje distinto: Cuando te sientas estancado por algún motivo en un curso detente y busca uno que sea previo al que estas viendo, tomalo, apruebalo y luego continúa con el que habías dejado en pausa.
Persevera, si estas cansado descansa un par de días si es necesario y luego retomas, el cerebro crea conexiones neuronales mientras nosotros descansamos, por eso es importante darle esos espacios.
Espero te sirvan de ayuda estos consejos amigo, ánimo, recuerda que lo que vayas aprendiendo por poco que sea, mas adelante te servirá, los puntos se unen.
Esto lo deben poner en la tereminal tal cual y dar enter:
export FLASK_APP=platzi-api
export FLASK_ENV=development
Para esta deben ir a Atlas, a la parte de su cluster le dan en connect para que les salgan las opciones y le dan en "Connect to your application"
export PLATZI_DB_URI=“MONGO-URI”
Después en driver seleccionan Python y su versión correspondiente y copian el string que les aparece en connection String Only solo hasta la parte ".mongodb.net/" lo que viene después de .net/....................... lo ignoran
regresan a su terminal y ejecutan el comando quitando los " " y con su string de conexión
export PLATZI_DB_URI=..............mongodb.net/
pymongo.errors.ConfigurationError: None of DNS query names exist
Esto significa que la URI de Mongo esta mal escrita, dejo el enlace a un comentario del usuario @JavierSLX donde explica como verla en el MongoDB Atlas.
Solo tuve que utilizar pip3 en vez de pip, ya que la creación del entorno y todos los pasos anteriores me funcionaron con pip3.
Gracias !!
Es más fácil después de haber tomado los cursos de Git, Python, Digital Ocean y tener algo de experiencia con Anaconda…
Deberían hacer un video con el ejemplo de instalación de dependencias para cada sistema operativo; seguir las instrucciones del texto sin las bases anteriores debe ser difícil y seguramente debe tener algún impacto en el abandono del curso.
La explicación para esta configuración se podría explicar muuuuucho mejor.....
Platzi Team, desde el primer día presenté un inconveniente con mi cuenta, les pregunté y no obtuve respuesta, pregunté días despues y no obtuve respuesta. Hago preguntas con respecto a la terrible explicación de la instalación de los archivos necesarios y no obtengo respuestas. ¿Por esto pagué una suscripción a Platzi que no es precisamente la definición de económica?
¡Hola! Comprendo tu frustración y estamos haciendo lo posible por mejorar este curso, ya lo tenemos en la mira. Por lo pronto recuerda que la mejor forma de comunicarte con el team es escribiendo a team@platzi.com 💪.
Falta metodología !!! Se debe mejorar el curso. Llego hasta aquí y no puedo continuar , solo me queda ver los videos. Debe existir garantia para quien no esta conforme.
Con el mayor de los respetos, considero y no creo que solo sea el del problema, "El profesor se salta un muchos pasos", tengo mucho tiempo realizando esta guía y no encuentro la forma de crear el servidor para windows, el profesor debió ser mas detallado con esto.
En mi caso me aparecía este error al hacer flask run en la terminal (Anaconda Powershell Prompt anaconda 3)
(base)PSC:\Users\lfzar\Documents\GitHub\platzi-mongo> flask run
*Environment: production
WARNING:This is a development server.Do not use it in a production deployment.Use a production WSGI server instead.*Debug mode: off
Usage: flask run [OPTIONS]Error:Could not locate a Flask application.You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
Para solucionarlo use las instrucciones de Boris pero aplicando las variables de entorno propuestas por JoseArturoEnriquez.0.Instalar anaconda con el .exe haciendo next conforme lo pida.1.Abrimos la terminal de anaconda, la buscamos con el nombre de “Anaconda PowershellPrompt”2.Clonamos el repositorio: git clone https://github.com/AERC18/platzi-mongo.git3.Ingresamos a la carpeta: cd platzi-mongo
4.Crear un nuevo ambiente: conda create --name platzi-mongo
5.Activar el ambiente: conda activate platzi-mongo
6.Instalar dependencias: conda install --file requirements.txt7.Ingresar las variables necesarias para ejecutar el proyecto:$env:FLASK_APP=platzi-api
$env:FLASK_ENV=development
$env:PLATZI_DB_URI=“mongodb+srv://platzi-admin:password@curso-platzi-m0b9c.mongodb.net”8.Corremos el servidor: flask run
Gracias a este post logre resolver el problema. Estuve intentando hacerlo en Ubuntu en Linux y no pude configurar las variables de entorno, pero despues volvi a windows y logré superar todo, no sin antes hacer el curso de git and github para aceitarme con las herramientas, ya que asi fue mucho mas facil hacer un fork y luego clone con git y mis llaves publicas con ssh, todo muy bien con platzi!
Gracias!!! esto me funciono, me daba un error de conexión en Postman y tuve que hacer todo de nuevo, no tenía nada que ver con eso sino con que no estaban bien agregadas las variables de entorno. Gracias gracias gracias!
En MacOS
1.- Clonar el repositorio de código con platzi-mongo e ingresar a la carpeta platzi-mongo
Demando que este curso sea actualizado por el amor de dioooos!
Te recomiendo usar también el formulario de feedback (botón "Reportar un Problema" en las clases del curso) para que puedas dar a conocer al Team las oportunidades de mejora del curso (ya que estas secciones de aportes no son muy eficaces para ello)
Ya mandé mi feedback por correo :)
Que confuso todo... demasiadas instalaciones y no se para que sirve cada una. Esto es MongoDB y termino instalando una plataforma de Python? como dijo un compañero, muy poco didactico!
Concuerdo con la mayoría de los compañeros de este curso esta parte debería ser explicada por vídeo se supone que antes de lanzar un curso debe pasar por un control de calidad y no tener estos tropiezo que son molestos para los estudiantes.