SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
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.

Mais conteúdo relacionado

Mais procurados

Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
Tdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das GaláxiasTdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das GaláxiasLeonardo Galani
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislAdriano Petrich
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com PloneRamiro Luz
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Luís Cobucci
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
 

Mais procurados (8)

Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
Tdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das GaláxiasTdc2014 - Guia do Tester Técnico das Galáxias
Tdc2014 - Guia do Tester Técnico das Galáxias
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fisl
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com Plone
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
 

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

PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonBruno Rocha
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoWilson Júnior
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de djangorosenclever
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaoTDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaotdc-globalcode
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...Rafael Jaques
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaGiovanni Bassi
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyLeonardo Galani
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkMayara Fernandes
 

Semelhante a Criação de aplicações web com python (20)

Python 08
Python 08Python 08
Python 08
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaoTDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
Python cherrypy
Python cherrypyPython cherrypy
Python cherrypy
 
JADE+JENA
JADE+JENAJADE+JENA
JADE+JENA
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variância
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
 
Assespro pr-workshop-robot framework
Assespro pr-workshop-robot frameworkAssespro pr-workshop-robot framework
Assespro pr-workshop-robot framework
 

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

  • 1. Criação de aplicações web com python utilizando o micro-framework Flask.
  • 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/
  • 6. Cinto de utilidades virtualenv Version-Control Python pip PyCharm ORM Google-Chrome Bootstrap jQuery JSON/XML
  • 8. $ env/bin/python pip install Flask $ env/bin/python hello.py * Running on http://localhost:5000/ Startando a aplicação...
  • 9. from flask import Flask app = Flask(__name__)
  • 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_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)
  • 20. @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)
  • 21. Para onde ir a partir daqui? flask.pocoo.org python.org jinja.pocoo.org wtforms.readthedocs.org