Diferencia entre revisiones de «Usuario:Lmorillas/desarrollo web servidor/flask/ejemplo completo/con citas»

De WikiEducator
Saltar a: navegación, buscar
(Controlador)
(Controlador)
Línea 31: Línea 31:
 
=== Controlador ===
 
=== Controlador ===
 
<source lang="python">
 
<source lang="python">
@app.route('/appointments/create/', methods=['GET', 'POST'])
+
@app.route('/cita/crear/', methods=['GET', 'POST'])
 
@login_required
 
@login_required
def appointment_create():
+
def crear_cita():
     """Provide HTML form to create a new appointment record."""
+
     """Muestra el formulario para crear una cita"""
     form = AppointmentForm(request.form)
+
     form = FormCita(request.form)
 +
   
 
     if request.method == 'POST' and form.validate():
 
     if request.method == 'POST' and form.validate():
         appt = Appointment(user_id=current_user.id)
+
         cita = Cita(user_id=session['uid'])
         form.populate_obj(appt)
+
         form.populate_obj(cita)
         db.session.add(appt)
+
         db.session.add(cita)
 
         db.session.commit()
 
         db.session.commit()
         # Success. Send the user back to the full appointment list.
+
         # Exito: devuelve al usuario a la lista de citas
         return redirect(url_for('appointment_list'))
+
         return redirect(url_for('lista_citas'))
     # Either first load or validation error at this point.
+
     # Error o GET.
     return render_template('appointment/edit.html', form=form)
+
     return render_template('cita/editar.html', form=form)
 
</source>
 
</source>
  

Revisión de 09:34 14 nov 2013


Modelo

class Cita(Base):
    """Una cita en el calendario."""
    __tablename__ = 'cita'
 
    id = Column(Integer, primary_key=True)
    creada = Column(DateTime, default=datetime.now)
    modificada = Column(DateTime, default=datetime.now,
                      onupdate=datetime.now)
    evento = Column(String(255))
    inicio = Column(DateTime, nullable=False)
    fin = Column(DateTime, nullable=False)
    todoeldia = Column(Boolean, default=False)
    lugar = Column(String(255))
    descripcion = Column(Text)
    user_id = Column(Integer, ForeignKey('usuarios.id'), nullable=False)
    usuario = relationship(User, lazy='joined', join_depth=1, viewonly=True)
    def duracion(self):
        tiempo = self.fin - self.inicio
        return tiempo.days * 24 * 60 * 60 + tiempo.seconds
 
    def __str__(self):
        return "{evento} [{fecha}}".format(evento=self.evento,
            fecha=self.inicio)

Creación de nuevas citas

Controlador

@app.route('/cita/crear/', methods=['GET', 'POST'])
@login_required
def crear_cita():
    """Muestra el formulario para crear una cita"""
    form = FormCita(request.form)
 
    if request.method == 'POST' and form.validate():
        cita = Cita(user_id=session['uid'])
        form.populate_obj(cita)
        db.session.add(cita)
        db.session.commit()
        # Exito: devuelve al usuario a la lista de citas
        return redirect(url_for('lista_citas'))
    # Error o GET.
    return render_template('cita/editar.html', form=form)

Formulario

class FormCita(Form):
    """Formulario para el modelo Citas. Genera HTML y valida entradas 
    """
    titulo = TextField('Cita', [validators.Length(max=255)])
    inicio = DateTimeField('Inicio', [validators.Required()])
    fin = DateTimeField('Fin')
    todoeldia = BooleanField('Todo el día')
    lugar = TextField('Lugar', [validators.Length(max=255)])
    descripcion = TextAreaField('Descripción')

Template