28 sept. 2016

CRUD usando Flask para MongoDB (parte 3).

CRUD usando Flask para MongoDB 

Continuando con la serie de artículos sobre acceso a mongodb desde Flask. 

Para revisar los artículos relacionados a este artículo pueden ver:

En la base de datos mongodb se tiene lo siguientes datos de los empleados:



[{"edad": 29, "nombre": "Jane Doe", "dni": 8, "sexo": "Femenino", "_id": {"$oid": "57ebbce45fd2bbeffc51330b"}}, {"edad": 39, "nombre": "John Doe", "dni": 7, "sexo": "Masculino", "_id": {"$oid": "57ebbd195fd2bbeffc51330c"}}, {"edad": 55, "nombre": "Pedro Perez", "dni": 6, "sexo": "Masculino", "_id": {"$oid": "57ebbd505fd2bbeffc51330d"}}, {"edad": 65, "nombre": "Petra", "dni": 5, "sexo": "Femenino", "_id": {"$oid": "57ebbd6b5fd2bbeffc51330e"}}, {"edad": 18, "nombre": "Luis Gonzalez", "dni": 4, "sexo": "Masculino", "_id": {"$oid": "57ebc34d5fd2bbeffc51330f"}}, {"edad": 28, "nombre": "Carolina", "dni": 3, "sexo": "Femenino", "_id": {"$oid": "57ebc3715fd2bbeffc513310"}}, {"edad": 34, "nombre": "Luissana", "dni": 2, "sexo": "Femenino", "_id": {"$oid": "57ebc3935fd2bbeffc513311"}}, {"edad": 43, "nombre": "Neg", "dni": 1, "sexo": "Masculino", "_id": {"$oid": "57ebc4b85fd2bbeffc513312"}}]

Para este artículo se va a desarrollar y probar un CRUD con Flask usando como base de datos mongodb.

Insertar un empleado en la colección


El código para insertar un empleado se muestra a continuación:



#Se define la funcion add con metodo get
@app.route('/add',methods=['GET'])
def add():
    #Se toma el nombre, sexo, edad y dni como argumentos del url
    nombre = str(request.args['nombre'])
    sexo = str(request.args['sexo'])
    edad = int(request.args['edad'])
    dni = int(request.args['dni'])
    #Se usa la coleccin empleados.
    empleados = mongo.db.empleados
    #Se inserta el documento a la coleccion
    empleados.insert({'nombre':nombre,'sexo':sexo,'edad':edad,'dni':dni})
    #Se retorna que el usuario fue agregado.
    return jsonify({'resultado': 'Usuario agregado' })


Buscar un empleado en la colección


El código para buscar un empleado en la colección se muestra a continuación:

#Se crea la funcion find con metodo get.

@app.route('/find',methods=['GET'])

def find():

    #Se obtiene el nombre como argumento del url.

    nombre = str(request.args['nombre'])

    #Se conecta a la coleccion empleados.

    empleados = mongo.db.empleados

    #Se busca el nombre en la coleccion.

    resultado = empleados.find_one({'nombre':nombre})

    #Y se devuelve el resultado.

    return dumps(resultado)



Actualizar un empleado en la colección


El código para actualizar un empleado se muestra a continuación:



#Se define la funcion update con metodo get que actualiza un documento de la

#coleccion.

@app.route('/update',methods=['GET'])

def update():

    #Se toma el nombre,edad y dni como argumentos.

    nombre = str(request.args['nombre'])

    edad = int(request.args['edad'])

    dni = int(request.args['dni'])

    #Se conecta a la coleccion.

    empleados = mongo.db.empleados

    #Se busca el nombre en los documentos.

    empleado = empleados.find_one({'nombre':nombre})

    #Se actuliza la edad, el dni.

    empleado['edad'] = edad

    empleado['dni'] = dni

    #Se salva el empleado en la coleccion.

    empleados.save(empleado)

    #Se devuelve que el usuario ha sido actualizado.

    return dumps({'resultado': 'Usuario actualizado'})




Remover un empleado de la colección



El código para remover un empleado de la colección es el siguiente:

#Se define la funcion delete.
#donde en el url se pasa el nombre del empleado a borrar
@app.route('/delete/<nombre>')
def delete(nombre):
    #Se conecta a la coleccion empleados.
    empleados = mongo.db.empleados
    #Se busca el documento del empleado por el nombre.
    empleado = empleados.find_one({'nombre':nombre})
    #Se remueve el empleado de la coleccion.
    empleados.remove(empleado)
    #Se devuelve el resultado.
    return dumps({'resultado': 'Usuario removido'})


Noten que la forma de pasar argumentos a la función delete es diferente de las demás funciones.


Construcción de la imagen Docker y ejecución de los contenedores

Los archivos Dockerfile y docker-compose.yml se explicaron en el primer artículo de esta sección ( se encuentran en el inicio de este artículo los enlaces).

Para construir la imagen docker se ejecuta:

docker-compose build

Para ejecutar los contenedores de la aplicación y de mongodb se ejecuta:

docker-compose up



Prueba del CRUD


Para crear un empleado se abre el siguiente URL en el navegador: 
http://localhost:5000/add?nombre=Ernesto&dni=33&edad=11&sexo=Masculino

Devuelve un json:
{
  "resultado": "Usuario agregado"
}



Para buscar el empleado que se incorporó anteriormente se abre el navegador en el URL:

http://localhost:5000/find?nombre=Ernesto

Devuelve el siguiente json:
{"_id": {"$oid": "57ec8714b7cd2f00565e8784"}, "sexo": "Masculino", "edad": 11, "nombre": "Ernesto", "dni": 33}


Para actualizar al empleado Ernesto se abre el navegador en el siguiente URL:

http://localhost:5000/update?nombre=Ernesto&edad=45&dni=50

Acá se actualiza la edad y el dni.

Esto devuelve el siguiente json:

{"resultado": "Usuario actualizado"}

Por último se va a eliminar al empleado abriendo el navegador en el siguiente URL:

http://localhost:5000/delete/Ernesto

Esto devuelve el siguiente json:

{"resultado": "Usuario removido"}


Se nota que para el delete la forma de pasar el URL es distinta a las demás que se han ejecutado.



El código fuente de este artículo se encuentra en la rama mongo3 de gitlab.com
Publicar un comentario en la entrada

AddThis