O documento explica como criar aplicações web com Python utilizando o micro-framework Flask, descrevendo o Flask, suas extensões e como configurar formulários, modelos de dados e templates.
2. @HelderVieira
● Tecnólogo em SI (IFPB)
● Pythonista
● Analista da CODATA
● Empreendedor
● Estudante de Gestão
Pública
● Músico católico
● Flamengo
3. Python
● Linguagem de Programação de alto nível
● Interpretada
● Imperativa
● Orientada a objetos
● Funcional
● Tipagem dinâmica e forte
● Multiplataforma
● Multiparadigma
4.
5. Flask
● Pocoo project
● Criado por Armin Ronacher
○ PSF Membership Roster desde 2012
● Lançado em 1º de abril de 2010
● Versão atual 0.10.1
● Licença BSD
http://flask.pocoo.org/
13. Configurando o
from flask_sqlalchemy import SQLAlchemy
app.config[“SQLALCHEMY_DATABASE_URI”] = 'sqlite:///app.db'
db = SQLAlchemy(app)
$ env/bin/pip install Flask-SQLAlchemy
14. Classe Mapeada com SQLAlchemy
class Cidade(db.Model):
__tablename__ = 'cidade'
id = db.Column("id_cidade", db.Integer,
db.Sequence('seq_cidade'), primary_key=True)
nome = db.Column(db.String(40), nullable=False )
uf = db.Column(db.String(2), nullable=False, default="PB")
def __unicode__(self):
return self.nome
15. Formulários com
$ env/bin/pip install Flask-WTF
from wtforms import DateField
from wtforms import FormField
from wtforms import HiddenField
from wtforms import IntegerField
from wtforms import TextAreaField
from wtforms import TextField
from wtforms import validators as v
from wtforms.ext.sqlalchemy.fields import QuerySelectField
16. class ItemRequisicaoForm(Form):
grupo_controle = QuerySelectField(
u"Grupo de Controle",
query_factory=lambda: db.session.query(GrupoControleMaterial).order_by('nome'),
allow_blank=True,
blank_text=u"Selecione...",
validators=[
v.Required(u'Este campo é de preenchimento obrigatório.')
]
)
id_material = SelectField(
u'Prescrição',
choices=[],
default=0,
coerce=int,
validators=[
v.Required(u'Este campo é de preenchimento obrigatório.')
]
)
quantidade = IntegerField(u'Quantidade')
posologia = TextField()
aprazamento = TextField()
17. Templates com o Jinja2
{% extends "main_template.html" %}
{% from "macros/form_field.html" import form_field, horizontal_form_field %}
{% block contentArea %}
<form id="form-default" class="form-horizontal" method="POST" role="form">
{% for field in form %}
{% if field.id != 'csrf_token' %}
{{ form_field(field) }}
{% else %}
{{ form.hidden_tag() }}
{% endif %}
{% endfor %}
</form>
{% endblock %}
18. Fazendo algo novo...
from flask import render_template
@app.route("/formulario")
def formulario():
form = ItemRequisicaoForm()
return render_template(“formulario.html”,
form=form)