Email check amb Flask
Aquest és un exemple de com treballar amb el microfamework web Flask per Python.
Intro
Realitzarem una simple aplicació que agafi les dades d'un formulari per POST i ens validi si el email enviat és correcte o no.
Per decidir si el email és correcte farem una simple comprovació: primer ha d'aparèixer una @ i més tard, com a mínim un punt "." (corresponent al domini del correu). Si no té aquests dos elements el donarem per erroni i ho notificarem a l'usuari.
Per poder fer aquesta pràctica heu d'haver llegir i provar el primer exercici de Desenvolupament d'aplicacions web amb frameworks a cacauet.org
Referències:
- flask.pocoo.org
- Flask Quickstart doc
- Python: introducció ràpida
- Jinja templates
- Desenvolupament d'aplicacions web amb frameworks a cacauet.org
Recorda els diversos passos per començar el projecte:
- Has de tenir un Virtualenv per instal·lar els paquets de Python necessaris (Flask). Recorda a activar-lo amb
$ source ~/env/bin/activate
- Activa el mode de DEBUG amb:
$ export FLASK_DEBUG=1
- Arrenca el servidor amb
$ python main.py
- Apunta el browser a
http://localhost:5000
Codi
Aquest és el codi per a l'arxiu .py:
# -*- coding: utf-8 -*-
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/checkemail", methods=["GET","POST"])
def checkemail():
missatge = "No has enviat cap email encara per comprovar."
if request.method == "POST":
email = request.form["email"]
# quan posem accents cal avisar que és un string unicode amb la "u" a davant
missatge = "L'email <b>" + email + u"</b> és incorrecte ja que no té una @"
# busquem que el email contingui al menys una @ i un .
trobat = 0
for lletra in email:
if trobat==0 and lletra=='@':
trobat = 1
missatge = "L'email <b>" + email + u"</b> té una @ pero li falta un . del domini posterior"
elif trobat==1 and lletra=='.':
trobat = 2
missatge = "L'email <b>" + email + u"</b> és correcte! (te una @ i un . de domini)"
return render_template( "checkemail.html", missatge=missatge )
if __name__ == "__main__":
app.run()
Template
I aquí tenim el template. Recordem que Flask utilitza Jinja2 per defecte.
<html>
<body>
<h2>Validació de email</h2>
<div class="missatge">
{{missatge|safe}}
</div>
<br>
<form method="post">
Introdueix adreça d'email a comprovar: <input type="text" name="email" /><br>
<input type="submit">
</form>
</body>
</html>