Criação de
aplicações web
com python
utilizando o micro-framework Flask.
@HelderVieira
● Tecnólogo em SI (IFPB)
● Pythonista
● Analista da CODATA
● Empreendedor
● Estudante de Gestão
Pública
● Músico católico
● Flamengo
Python
● Linguagem de Programação de alto nível
● Interpretada
● Imperativa
● Orientada a objetos
● Funcional
● Tipagem dinâmica e forte
● Multiplataforma
● Multiparadigma
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/
Cinto de utilidades
virtualenv
Version-Control
Python pip
PyCharm
ORM Google-Chrome
Bootstrap
jQuery
JSON/XML
$ virtualenv env
$ env/bin/python pip install Flask
$ env/bin/python hello.py
* Running on http://localhost:5000/
Startando a aplicação...
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Extensões
● Admin
● i18n
● CouchDB
● Debug / Testes
● GAE
● Genshi
● Gravatar
● Heroku
● Login
● Mail
● Mako
● MongoDB
● OAuth
● OpenID
Continua...
Configurando o
from flask_sqlalchemy import SQLAlchemy
app.config[“SQLALCHEMY_DATABASE_URI”] = 'sqlite:///app.db'
db = SQLAlchemy(app)
$ env/bin/pip install Flask-SQLAlchemy
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
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
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()
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 %}
Fazendo algo novo...
from flask import render_template
@app.route("/formulario")
def formulario():
form = ItemRequisicaoForm()
return render_template(“formulario.html”,
form=form)
DRY!Don’t repeat yourself!
@app.route("/formulario", methods=['GET', 'POST'])
def formulario():
form = ItemRequisicaoForm()
if form.validate_on_submit():
new_item = ItemRequisicao()
form.populate_obj(new_item)
db.session.add(new_item)
db.session.commit()
flash(u'Os dados foram inseridos com sucesso!')
return redirect(url_for(‘index’))
else:
flash(u'Verifique os dados!')
return render_template(“formulario.html”, form=form)
Para onde ir a partir daqui?
flask.pocoo.org
python.org
jinja.pocoo.org
wtforms.readthedocs.org
Helder Vieira
www.helder.eti.br
contato@helder.eti.br
Perguntas?
Obrigado.

Criação de aplicações web com python

  • 1.
    Criação de aplicações web compython utilizando o micro-framework Flask.
  • 2.
    @HelderVieira ● Tecnólogo emSI (IFPB) ● Pythonista ● Analista da CODATA ● Empreendedor ● Estudante de Gestão Pública ● Músico católico ● Flamengo
  • 3.
    Python ● Linguagem deProgramação de alto nível ● Interpretada ● Imperativa ● Orientada a objetos ● Funcional ● Tipagem dinâmica e forte ● Multiplataforma ● Multiparadigma
  • 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/
  • 6.
    Cinto de utilidades virtualenv Version-Control Pythonpip PyCharm ORM Google-Chrome Bootstrap jQuery JSON/XML
  • 7.
  • 8.
    $ env/bin/python pipinstall Flask $ env/bin/python hello.py * Running on http://localhost:5000/ Startando a aplicação...
  • 9.
    from flask importFlask app = Flask(__name__)
  • 10.
  • 11.
    if __name__ =="__main__": app.run()
  • 12.
    Extensões ● Admin ● i18n ●CouchDB ● Debug / Testes ● GAE ● Genshi ● Gravatar ● Heroku ● Login ● Mail ● Mako ● MongoDB ● OAuth ● OpenID Continua...
  • 13.
    Configurando o from flask_sqlalchemyimport SQLAlchemy app.config[“SQLALCHEMY_DATABASE_URI”] = 'sqlite:///app.db' db = SQLAlchemy(app) $ env/bin/pip install Flask-SQLAlchemy
  • 14.
    Classe Mapeada comSQLAlchemy 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/pipinstall 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 oJinja2 {% 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... fromflask import render_template @app.route("/formulario") def formulario(): form = ItemRequisicaoForm() return render_template(“formulario.html”, form=form)
  • 19.
  • 20.
    @app.route("/formulario", methods=['GET', 'POST']) defformulario(): form = ItemRequisicaoForm() if form.validate_on_submit(): new_item = ItemRequisicao() form.populate_obj(new_item) db.session.add(new_item) db.session.commit() flash(u'Os dados foram inseridos com sucesso!') return redirect(url_for(‘index’)) else: flash(u'Verifique os dados!') return render_template(“formulario.html”, form=form)
  • 21.
    Para onde ira partir daqui? flask.pocoo.org python.org jinja.pocoo.org wtforms.readthedocs.org
  • 22.