Générer des formulaires web avec Flask en 2 minutes !

Il est fréquent d'avoir besoin d'un formulaire à portée de main pour récolter certaines informations. Nous allons voir comment générer des formulaires web très simplement avec Flask, un framework Python permettant de créer des applications web.
Mise en place
Commençons par installer Flask
et Flask-wtf
avec Pip, le gestionnaire de paquets de Python.
pip install flask flask-wtf
Voici la structure du projet que vous devriez avoir :
mon_projet/
├── app.py
└── templates/
└── form.html
Voici un exemple de code app.py
:
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SelectField, SubmitField
from wtforms.validators import DataRequired, URL
app = Flask(__name__)
app.secret_key = 'supersecretkey' # CSRF token
class ToolSubmissionForm(FlaskForm):
name = StringField("Nom de l'outil", validators=[DataRequired()])
url = StringField("URL du projet", validators=[DataRequired(), URL()])
description = TextAreaField("Description", validators=[DataRequired()])
technologies = StringField("Technos utilisées (séparées par des virgules)", validators=[DataRequired()])
license = SelectField("Type de licence", choices=[
('mit', 'MIT'),
('apache', 'Apache 2.0'),
('gpl', 'GPLv3'),
('bsd', 'BSD'),
('proprietary', 'Propriétaire')
])
submit = SubmitField("Soumettre l'outil")
@app.route('/', methods=['GET', 'POST'])
def index():
form = ToolSubmissionForm()
if form.validate_on_submit():
return (
f"<h2>Outil reçu ! 🚀</h2>"
f"<p><strong>Nom :</strong> {form.name.data}</p>"
f"<p><strong>URL :</strong> <a href='{form.url.data}' target='_blank'>{form.url.data}</a></p>"
f"<p><strong>Description :</strong> {form.description.data}</p>"
f"<p><strong>Technos :</strong> {form.technologies.data}</p>"
f"<p><strong>Licence :</strong> {form.license.data}</p>"
)
return render_template('form.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
Ce code Flask a besoin de s'appuyer sur un template html comme suivant:
templates/form.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Formulaire</title>
</head>
<body>
<h1>Propose ton outil 🔧</h1>
<form method="POST">
{{ form.hidden_tag() }}
<p>
{{ form.name.label }}<br>
{{ form.name(size=40) }}
</p>
<p>
{{ form.url.label }}<br>
{{ form.url(size=60) }}
</p>
<p>
{{ form.description.label }}<br>
{{ form.description(rows=4, cols=60) }}
</p>
<p>
{{ form.technologies.label }}<br>
{{ form.technologies(size=60) }}
</p>
<p>
{{ form.license.label }}<br>
{{ form.license() }}
</p>
<p>{{ form.submit() }}</p>
</form>
</body>
</html>
Maintenant que notre code Flask ainsi que le template html est en place, pour lancer le serveur web, exécuter la commande suivante
python app.py
Puis, accéder en localhost:5000
sur votre navigateur web.
Pour aller plus loin
Cet article montre la structure du projet basique, à vous de l'adapter à votre contexte ainsi que de l'améliorer !
Pour aller plus loin dans l'amélioration, il est possible de
- Utiliser un framework pour le desing de type Tailwind CSS
- Conteneuriser l'application avec Docker (essentiel !)
- Connecter une base de données (PostgreSQL, MySQL, SQLite etc...)
- Sécuriser d'avantage l'application
- Ajouter de l'authentification
- Avoir une gestion d'erreurs/codes retour accrue