Diferencia entre revisiones de «Usuario:Lmorillas/desarrollo web servidor/flask/ejemplo completo/con citas»
De WikiEducator
(→Controlador) |
(→Controlador) |
||
Línea 31: | Línea 31: | ||
=== Controlador === | === Controlador === | ||
<source lang="python"> | <source lang="python"> | ||
− | @app.route('/ | + | @app.route('/cita/crear/', methods=['GET', 'POST']) |
@login_required | @login_required | ||
− | def | + | def crear_cita(): |
− | """ | + | """Muestra el formulario para crear una cita""" |
− | form = | + | form = FormCita(request.form) |
+ | |||
if request.method == 'POST' and form.validate(): | if request.method == 'POST' and form.validate(): | ||
− | + | cita = Cita(user_id=session['uid']) | |
− | form.populate_obj( | + | form.populate_obj(cita) |
− | db.session.add( | + | db.session.add(cita) |
db.session.commit() | db.session.commit() | ||
− | # | + | # Exito: devuelve al usuario a la lista de citas |
− | return redirect(url_for(' | + | return redirect(url_for('lista_citas')) |
− | # | + | # Error o GET. |
− | return render_template(' | + | return render_template('cita/editar.html', form=form) |
</source> | </source> | ||
Revisión de 10: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')