criação de aplicações web com python
DESCRIPTION
Nesta apresentação, faremos um breve tour sobre esta ferramenta abordando, de forma prática, sua utilização e integração com tecnologias afins, como engine de templates, mapeamento objeto-relacional e gerador de formulários. Apresentação realizada em 29/07/2014 na Worksigma http://worksigma.unisigma.com.br/TRANSCRIPT
![Page 1: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/1.jpg)
Criação de aplicações web com pythonutilizando o micro-framework Flask.
![Page 2: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/2.jpg)
@HelderVieira● Tecnólogo em SI (IFPB)● Pythonista● Analista da CODATA● Empreendedor● Estudante de Gestão
Pública● Músico católico● Flamengo
![Page 3: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/3.jpg)
Python
● Linguagem de Programação de alto nível● Interpretada● Imperativa● Orientada a objetos● Funcional● Tipagem dinâmica e forte● Multiplataforma● Multiparadigma
![Page 4: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/4.jpg)
![Page 5: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/5.jpg)
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/
![Page 6: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/6.jpg)
Cinto de utilidades
virtualenv
Version-Control
Python pip
PyCharm
ORM Google-ChromeBootstrap
jQuery
JSON/XML
![Page 7: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/7.jpg)
$ virtualenv env
![Page 8: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/8.jpg)
$ env/bin/python pip install Flask$ env/bin/python hello.py * Running on http://localhost:5000/
Startando a aplicação...
![Page 9: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/9.jpg)
from flask import Flaskapp = Flask(__name__)
![Page 10: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/10.jpg)
@app.route("/")def hello(): return "Hello World!"
![Page 11: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/11.jpg)
if __name__ == "__main__": app.run()
![Page 12: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/12.jpg)
Extensões
● Admin● i18n● CouchDB● Debug / Testes● GAE● Genshi● Gravatar
● Heroku● Login● Mail● Mako● MongoDB● OAuth● OpenID
Continua...
![Page 13: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/13.jpg)
Configurando o
from flask_sqlalchemy import SQLAlchemy
app.config[“SQLALCHEMY_DATABASE_URI”] = 'sqlite:///app.db'
db = SQLAlchemy(app)
$ env/bin/pip install Flask-SQLAlchemy
![Page 14: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/14.jpg)
Classe Mapeada com SQLAlchemyclass 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
![Page 15: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/15.jpg)
Formulários com
$ env/bin/pip install Flask-WTF
from wtforms import DateFieldfrom wtforms import FormFieldfrom wtforms import HiddenFieldfrom wtforms import IntegerFieldfrom wtforms import TextAreaFieldfrom wtforms import TextFieldfrom wtforms import validators as vfrom wtforms.ext.sqlalchemy.fields import QuerySelectField
![Page 16: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/16.jpg)
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()
![Page 17: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/17.jpg)
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 %}
![Page 18: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/18.jpg)
Fazendo algo novo...
from flask import render_template
@app.route("/formulario")
def formulario():
form = ItemRequisicaoForm()
return render_template(“formulario.html”,
form=form)
![Page 19: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/19.jpg)
DRY!Don’t repeat yourself!
![Page 20: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/20.jpg)
@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)
![Page 21: Criação de aplicações web com python](https://reader030.vdocuments.mx/reader030/viewer/2022013115/55985adc1a28ab65768b461a/html5/thumbnails/21.jpg)
Para onde ir a partir daqui?
flask.pocoo.org
python.org
jinja.pocoo.org
wtforms.readthedocs.org