Flask y CouchDB, Guardando Información (III)

Que siga la conga !

Hoy vamos a tomar datos desde un formulario y guardarlos en CouchDB (En mi caso usando Cloudant)

Entonces, tenemos un formulario así:

<form class="form-horizontal" method="post" action="/Admin/Nuevo/Ramo">
    <fieldset>
        <legend>Nuevo Ramo</legend>
        <div class="form-group">
            <label class="col-md-4 control-label" for="txt_nombre_ramo">Nombre Ramo</label>
            <div class="col-md-5">
                <input id="txt_nombre_ramo" name="txt_nombre_ramo" type="text" placeholder="Ej: Inglés I" class="form-control input-md" required>
            </div>
        </div>
        <div class="form-group">
            <label class="col-md-4 control-label" for="txt_pass_ramo">Contraseña</label>
            <div class="col-md-6">
                <input id="txt_pass_ramo" name="txt_pass_ramo" type="password" class="form-control input-md">
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-4">
                <button id="btn_guardar" name="btn_guardar" class="btn btn-primary">Guardar</button>
            </div>
        </div>
    </fieldset>
</form> 

Como ven, el formulario apunta a: /Admin/Nuevo/Ramo , y la ruta definida es así:

@app.route('/Admin/Nuevo/<Item>', methods=['POST'])
def AdminNuevo(Item):
    from flask import request
    if(Item == 'Ramo'):
        nombre, passw = request.form['txt_nombre_ramo'], request.form['txt_pass_ramo']
        from Auxiliares.validador import Validador
        respuesta = Validador.IngresoRamo(nombre, passw)
        if(respuesta):
            from DAO.ramoDAO import RamoDAO
            rdao = RamoDAO()
            rdao._Guardar(respuesta)
        else:
            return "Campos no pueden quedar vacíos"

Lo nuevo aquí es que, para recibir parámetros enviados desde el formulario, necesitamos usar request. Las variables las obtenemos como: request.form[‘nombre_variable’] .

Lo siguiente que tengo, es una llamada a una función que me valida los campos y devuelve un objeto Ramo o un False (dependiendo):

def IngresoRamo(cls, NombreRamo, PassRamo):
    """Comprobar que no vengan vacíos"""
    if(NombreRamo and PassRamo):
        from Clases.ramo import Ramo
        return Ramo(Nombre = NombreRamo, Pass = PassRamo)
    else:
        return False 

A su vez, y aquí viene lo importante, la clase Ramo tiene lo siguiente:

from couchdbkit import Document, StringProperty

class Ramo(Document):


    Nombre = StringProperty(required = True)
    Pass = StringProperty(required = True)

Importamos Document y StringProperty y creamos la clase Ramo como un Document.

Por último, para guardar en la BD:

from couchdbkit import Server


class RamoDAO():

    server = None
    db = None


    def __init__(self):
        self.server = Server('https://usuario:pass@usuario.cloudant.com')
        self.db = self.server.get_or_create_db('notas_st')


    def _Guardar(self, Ramo):
        Ramo.set_db(self.db)
        Ramo.save()

Y con esto nos conectamos a la BD e insertamos el registro. Si vamos a la página: Captura de pantalla 2014-04-18 a la(s) 23.30.52 Y como pueden ver, couchdbkit mágicamente nos agrega el doc_type dependiendo de la clase del objeto ingresado😉

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en CouchDB, Python y etiquetada , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s