Introducción
Contenido
En este tutorial, aprenderá cómo implementar una aplicación Flask en Heroku. ¡La aplicación puede ser tan simple como una aplicación «Hello World» en una plataforma de monitoreo de redes sociales!
Hoy en día no hay empresa que no cuente con una aplicación web que le ayude a llegar a una mayor audiencia, o que preste sus servicios a través de un portal online.
Hoy está a punto de aprender cómo crear una API usando Flask como un caso de estudio sobre cómo implementar su aplicación en Heroku.
Construyendo una API REST con Flask
En el directorio de su proyecto, comencemos creando un virtualenv:
$ python -m venv venv/
Y activémoslo con el source
mando:
$ source venv/bin/activate
Entonces, usemos pip
para instalar las bibliotecas que vamos a usar – flask
para construir la aplicación y gunicorn
como nuestro servidor:
$ pip install flask
$ pip install gunicorn
Nuestra aplicación va a ser una API simple que recibe un nombre y devuelve un mensaje de bienvenida:
Te puede interesar:Comprender la palabra clave «rendimiento» de Python# app.py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/getmsg/', methods=['GET'])
def respond():
# Retrieve the name from url parameter
name = request.args.get("name", None)
# For debugging
print(f"got name {name}")
response = {}
# Check if user sent a name at all
if not name:
response["ERROR"] = "no name found, please send a name."
# Check if the user entered a number not a name
elif str(name).isdigit():
response["ERROR"] = "name can't be numeric."
# Now the user entered a valid name
else:
response["MESSAGE"] = f"Welcome {name} to our awesome platform!!"
# Return the response in json format
return jsonify(response)
@app.route('/post/', methods=['POST'])
def post_something():
param = request.form.get('name')
print(param)
# You can add the test cases you made in the previous function, but in our case here you are just testing the POST functionality
if param:
return jsonify({
"Message": f"Welcome {name} to our awesome platform!!",
# Add this option to distinct the POST request
"METHOD" : "POST"
})
else:
return jsonify({
"ERROR": "no name found, please send a name."
})
# A welcome message to test our server
@app.route("https://Pharos.sh.com/")
def index():
return "<h1>Welcome to our server !!</h1>"
if __name__ == '__main__':
# Threaded option to enable multiple instances for multiple user access support
app.run(threaded=True, port=5000)
Para probar su aplicación localmente, presionemos el http://127.0.0.1:5000/ punto final. Si todo está bien, deberíamos recibir un mensaje de bienvenida:
También podemos enviar un nombre como parámetro, como http://localhost:5000/getmsg/?name=Mark
:
{"MESSAGE":"Welcome Mark to our awesome platform!!"}
Con nuestra aplicación lista, impleméntela en Heroku.
Heroku
Heroku es una de las primeras plataformas en la nube como servicio (PaaS) y admite varios lenguajes: Ruby, Java, Node.js, Scala, Clojure, Python, PHP y Go.
Lo primero que debemos hacer es definir qué bibliotecas usa nuestra aplicación. De esa manera, Heroku sabe cuáles proporcionarnos, de manera similar a cómo los instalamos localmente cuando desarrollamos la aplicación.
Para lograr esto, necesitamos crear un requirements.txt
archivo con todos los módulos:
$ pip freeze > requirements.txt
De esta manera terminamos con un requirements.txt
archivo que contiene las bibliotecas que estamos usando y sus versiones:
Click==7.0
Flask==1.1.1
gunicorn==19.9.0
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.6
Nota: Uno de los errores comunes son los requisitos de ortografía, es un verdadero dolor cuando depura su código durante horas y descubre que la aplicación no se ejecuta porque el servidor no descargó los módulos. La única forma de que Heroku conozca los módulos que está utilizando es agregarlos al requirements.txt
archivo, así que ten cuidado!
Para que Heroku pueda ejecutar nuestra aplicación como debería, necesitamos definir un conjunto de procesos / comandos que debería ejecutar de antemano. Estos comandos se encuentran en el Procfile
:
web: gunicorn app:app
los web
El comando le dice a Heroku que inicie un servidor web para la aplicación, usando gunicorn
. Dado que nuestra aplicación se llama app.py
, hemos configurado el app
nombre para ser app
también.
Cuenta Heroku
Ahora, deberíamos crear una cuenta de Heroku.
Una vez que esté fuera del camino, en el tablero, seleccione Nuevo -> Crear nueva aplicación:
Elija un nombre para la aplicación y elija una región donde le gustaría alojarla:
Una vez que se crea la aplicación en Heroku, estamos listos para implementarla en línea.
Te puede interesar:Python para la PNL: trabajar con la biblioteca FastText de FacebookGit
Para cargar nuestro código, usaremos Git. Primero, hagamos un repositorio de git:
$ git init .
Y ahora, agreguemos nuestros archivos y commit
:
$ git add app.py Procfile requirements.txt
$ git commit -m "first commit"
Implementar la aplicación en Heroku
Para finalmente implementar la aplicación, necesitaremos instalar el Heroku CLI con el que ejecutaremos comandos relacionados con Heroku. Iniciemos sesión en nuestra cuenta usando nuestras credenciales ejecutando el comando:
$ heroku login -i
Alternativamente, podemos iniciar sesión usando el navegador si ejecutamos el comando:
$ heroku login
En este punto, mientras estamos conectados, debemos agregar nuestro repositorio al remoto:
$ heroku git:remote -a {your-project-name}
Asegúrese de reemplazar {your-project-name}
con el nombre real de su proyecto que seleccionó en el paso anterior.
Y con eso hecho, carguemos el proyecto enviándolo a Heroku:
Te puede interesar:Leer y escribir YAML en un archivo en Python$ git push heroku master
Debería aparecer un registro de progreso extenso en su terminal, que termina con:
...
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 45.1M
remote: -----> Launching...
remote: Released v4
remote: https://{your-project-name}.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/{your-project-name}.git
ae85864..4e63b46 master -> master
¡Felicitaciones, ha cargado con éxito su primera aplicación web en Heroku! Ahora es el momento de probar y verificar nuestra API.
Probando la API
En el registro que se ha mostrado en la consola encontrará un enlace para su aplicación https://{your-project-name}.herokuapp.com/
, este enlace también se puede encontrar en la pestaña Configuración, en la sección Dominios y certificados:
Visitando el enlace, podemos llegar a nuestra aplicación, que ahora está online y es pública:
En caso de que hubiera algún error, puede acceder a los registros y solucionar problemas desde allí:
Puede probar manualmente su aplicación en el navegador, escribiendo la URL y agregando la ruta para el /getmsg/
ruta. Sin embargo, dado que las aplicaciones tienden a volverse cada vez más complejas, se recomienda utilizar herramientas como Cartero.
Ahora probemos el GET
solicitud a nuestra aplicación con un name
parámetro:
Ahora probemos una URL que no esté vinculada a ninguna función, como por ejemplo /newurl
, con una solicitud GET:
Como se esperaba, nuestra aplicación Flask devolvió una respuesta 404.
Nota: Puede cambiar la vista de la salida desde Bonita, Crudoy Avance, que le muestra cómo se vería la salida en su navegador.
Ahora probemos un POST
solicitud:
Además, veamos qué sucede si omitimos por completo el name
parámetro:
{"ERROR":"no name found, please send a name."}
Probamos nuestra aplicación y confirmamos que todo funciona bien. Para ver el historial de su servidor y las solicitudes que se hicieron, puede verificar los registros de su sitio a través de Heroku:
Puedes ver aquí el POST
solicitud que hicimos a nuestra página /post/
.
Además, puede ver el historial de creación de la aplicación. Además, si hay algún problema durante la construcción, puede encontrarlo en la página de registro.
Conclusión
En este artículo mostramos un ejemplo simple de cómo construir nuestra primera API simple en Heroku usando el micro-framework Flask. El proceso de desarrollo sigue siendo el mismo a medida que continúa creando su aplicación.
Heroku ofrece un plan gratuito y planes para estudiantes. El plan gratuito es limitado, pero funciona bastante bien para una aplicación inicial, un POC o un proyecto simple, por ejemplo. Sin embargo, si desea escalar su aplicación, entonces querrá considerar uno de los planes que están disponibles en el sitio desde aquí.
Para obtener más información sobre Heroku, puede consultar Heroku manual en sí.