Hecho un camino duro pero que valdrá la pena
Fundamentos de Flask
Qué aprenderás sobre Flask
¿Cómo funcionan las aplicaciones en internet?
¿Qué es Flask?
Instalación de Python, pip y virtualenv
Hello World Flask
Debugging en Flask
Request y Response
Ciclos de Request y Response
Uso de templates y archivos estáticos
Templates con Jinja 2
Estructuras de control
Herencia de templates
Include y links
Uso de archivos estáticos: imágenes
Configurar páginas de error
Extensiones de Flask
Flask Bootstrap
Configuración de Flask
Implementación de Flask-Bootstrap y Flask-WTF
Uso de método POST en Flask-WTF
Desplegar Flashes (mensajes emergentes)
Pruebas básicas con Flask-testing
Proyecto
Planteamiento del proyecto: To Do List
App Factory
Uso de Blueprints
Blueprints II
Base de datos y App Engine con Flask
Configuración de Google Cloud SDK
Configuración de proyecto en Google Cloud Platform
Implementación de Firestore
Autenticación de usuarios: Login
Autenticación de usuarios: Logout
Signup
Agregar tareas
Eliminar tareas
Editar tareas
Deploy a producción con App Engine
Conclusiones
You don't have access to this class
Keep learning! Join and start boosting your career
Implementing forms in Flask is essential for developing interactive and dynamic web applications. Forms allow you to collect information from users, such as in a login process or registering a new account. In this guide, we will explore how to use Flask WTForms to create, display and validate forms in Flask.
Flask WTForms is an extension that integrates WTForms, a Python library for rendering and validating web forms, with Flask. It provides a simple and structured way to handle forms, allowing developers to focus on the application logic without worrying about the details of form validation and data handling.
Let's start by installing the Flask WTForms extension. We must add it to the requirements.txt
file of our application. The installation is done by executing the following command in the terminal:
pip install -r requirements.txt
To create our first form in Flask, we will define a class that extends FlaskForm
. In this case, we will develop alogin form
with fields for username and password.
Import FlaskForm and required fields:
from flask_wtf import FlaskFormfrom wtforms import StringField, PasswordFieldfrom wtforms.validators import DataRequired.
Define the form class:
class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()])
The username
and password
fields are validated to ensure that the user enters the required information.
To complete the form, we will add a submit field:
from wtforms import SubmitField
class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Submit').
To render our form in an HTML template, we import it into the view context and use it in the hello.html
file. We can do it in the following way:
Create an instance of the form and pass it to the context:
@app.route('/hello', methods=['GET', 'POST'])def hello(): form = LoginForm() return render_template('hello.html', form=form)
Render the form in HTML:
We will use the bootstrap_wtf
tools for a simpler rendering of our form:
{% from 'bootstrap/wtf.html' import wtf_quick_form as wtf %}{{ wtf(form) }}
This wtf_quick_form
function allows an easy and complete rendering of the form with the help of Bootstrap.
Finally, we need to validate and handle the response of the form when it is submitted to the server. This involves setting the view to process the form:
@app.route('/hello', methods=['GET', 'POST'])def hello(): form = LoginForm() if form.validate_on_submit(): # Process form data username = form.username.data password = form.password.data # Add authentication logic return render_template('hello.html', form=form)
We have learned how to install Flask WTForms, create a login form, add basic validations and render the form using HTML templates in Flask. Now we are ready to move on to managing forms in our web applications - keep exploring and improving your Flask skills!
Contributions 47
Questions 7
Hecho un camino duro pero que valdrá la pena
Un aporte para automatizar, en windows lo puedes realizar con la consola de git
creas un archivo .sh con lo siguiente
#!/bin/bash
venv/Scripts/activate
pip install -r requeriments.txt
export FLASK_APP=main.py
export FLASK_DEBUG=1
export FLASK_ENV=development
flask run
Fue complicado pero logré aplicar cambios en el css de los componentes del formulario y seguir utilizando quick_form lo dejo aquí
después de horas para correr esto porque me estaba dando el siguiente error: jinja2.exceptions.UndefinedError: ‘wtf’ is undefined
y no había agregado el {% import "bootstrap/wtf.html" as wtf %}
en el hello.html
Para los que quieran guardar las variables de ambiente en un archivo, encontré esta forma:
pip install python-dotenv
FLASK_APP=main.py
FLASK_DEBUG=1
FLASK_ENV=development
Es todo, espero les sirva
Me ha encantado, solo he tenido que buscar la documentación para bootstrap 4 y en hello he tenido que importar así:
'% from 'bootstrap4/form.html' import render_form %
y en div container solo poner
{{ render_form(login_form) }}
"what the Forms " … jajajaja esos de FLASK son unos loquillos
En la documentacion de WTForms nos hablan de los validadores estos son
flask what the f*ck
lol
Acá hay un poco más de documentación para validadores con wtf https://wtforms.readthedocs.io/en/stable/validators.html
Flask what the fuck
Todo corriendo a la perfección
Como dato extra, DataRequired únicamente agrega el atributo HTML required a los inputs del formulario, por lo que si se necesita mas control deberían implementar JavaScript.
<input class="form-control" id="username" name="username" required="" type="text" value="">
Waaao WTF es muy interesante y productivo
Las app web reciben info del usuario a través de formularios o formas mediante el metodo post. El servidor recibe la información y la valida.
flaskWTF – implementa wtforms en flask, que a su vez es una librería de python para validar formas web
Aca les dejo el enlace:
https://wtforms.readthedocs.io/en/3.0.x/crash_course/
De paso una muestra de uso
Por si no entendieron bien Flask-Bootstrap
https://youtu.be/PE9ZGniSDW8
documentación oficial de Flask_wtf
https://flask-wtf.readthedocs.io/en/1.0.x/
Para aquellos que hicieron lo que els comente con lo de bootstrap asi quedaria el codigo.
¿Cómo darle estilo a los input? Osea al login_form_username.
Ya que no es una etiquetea HTML no se le puede agregar una clase y por ende no se le agrega css. ¿Cómo hacerlo entonces?
Excelente forma de crear formularios.
Con bootstrap-flask para logar el render del form se debe hacer de la siguiente manera:
{% from 'bootstrap/form.html' import render_form %}
{{ render_form(login_form) }}
Aunque no veo que bootstrap-flask tenga soporte de directo de WTF el ejemplo resulta igual que el realizado en la clase, incluso el mismo error que se resolverá en la siguiente clase.
from wtforms import validators
username = StringField(‘Nombre de usuario’, validators=[validators.input_required()])
password = PasswordField(‘Password’, validators=[validators.input_required()])
Aqui les inserto la imagen del error!
alguien me podria ayudar? me sale que no puedo importar dicha flask_wtf ya se encuentra en el requeriments.txt y ya lo tengo instalado si alguien me podria ayudar!
flask.JPG
from flask import Flask, request, make_response, redirect, render_template,session
from flask_wtf import FlaskForm
app = Flask(__name__)
todo = ['TODO 1', 'TODO 2', 'TODO 3']
#pagina cuandeo arroja un error
@app.errorhandler(404)
def not_found(error):
return render_template('404.html', error=error)
@app.route('/')
def index():
user_ip = request.remote_addr
response = make_response(redirect('/hello'))
session['user_ip']= user_ip
return response
@app.route('/hello')
def hola():
user_ip = session.get('user_ip')
context = {
'user_ip' : user_ip,
'todo' : todo,
}
return render_template('hola.html', **context)
if __name__ == '__main__':
# This is used when running locally. Gunicorn is used to run the
# application on Google App Engine. See entrypoint in app.yaml.
app.run(host='127.0.0.1', port=8080, debug=True)
# [END gae_flex_quickstart]
cuando vi lo de boostrap me senti como milhause
Si alguien no puede usar wtf.fields o wtf.validators, utilicen:
pip install Flask-WTF
y despues:
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired
Para instalar la version nueva de WTF usen el siguiente comando:
pip install WTForms
Esta es una manera de implementar un formulario:
class RegistrationForm(Form):
username = StringField(‘Username’, [validators.Length(min=4, max=25)])
email = StringField(‘Email Address’, [validators.Length(min=6, max=35)])
accept_rules = BooleanField(‘I accept the site rules’, [validators.InputRequired()])
Submit field
RENDEREAR
Realmente terrible esa pantalla dividida para la clase, no se alcanza a ver el código completo y toca estar pausando y devolviendo para ver mientras escribe.
Este docente tiene que re-evaluar toda su metodología.
jajaja, what the forms
De los mejores maestros de Platzi…genial…muchas gracias…
 }}
Yo uso Anaconda para manejar los ambientes virtuales y conda para instalar los paquetes de python. Por aquí les dejo por si les interesa cómo usar requirements.txt con conda: https://www.activestate.com/resources/quick-reads/how-to-manage-python-dependencies-with-conda/
{% wtf.lol %} ```
Con una conexión segura SSL/TLS es suficientemente seguro para enviar información a mi servidor? O se debe usar algo adicional.
Como dato extra, DataRequired únicamente agrega el atributo HTML required a los inputs del formulario, por lo que si se necesita mas control deberían implementar JavaScript.
Para python 3.8.1 y Flask_wtf = 0.14.3 se tiene que importar así:
from wtforms import Form, StringField, SubmitField, PasswordField
from wtforms.validators import DataRequired
y la clase queda así:
class LoginForm(Form):
Saludos, les comparto informacion oficial acerca de este framework:
Hola 😃.
Les comparto mi progreso hasta este punto.
Si quieren agregar una clase a su form para sus estilos pueden hacer esto
{{ login_form.username(class_='form-control') }}
wooooooooooooo, en serio esto esta increibleeee
Me sale el error
<No name 'ext' in module 'flask'>
Alguien me puede ayudar?
import fask_wft from FlaskForm
import fask_wft.fields from StingField, PasswordField
class LoginForm(FlaskForm)
username=StringField('Username: ')
password=PasswordField('Password: ')
{% import 'bootstrap/wtf.html' as wtf %}
<div class="container">
{% wtf.quick_form(login_form) %}
</div>
Want to see more contributions, questions and answers from the community?