Slide 1

Slide 1 text

Python na Copa Osvaldo Matos Júnior

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

O que vem na caixa? • Servidor para desenvolvimento e debugger • Suporte integrado para testes unitários • Sistema de rotas (urls) • Sistema de templates (Jinja2) • Secure Cookies

Slide 7

Slide 7 text

Python virtualenv pip Flask Jinja2 # Vagrant Technologies

Slide 8

Slide 8 text

$ virtualenv env

Slide 9

Slide 9 text

$ pip install Flask

Slide 10

Slide 10 text

Flask==0.10 Flask-Admin>=0.2 Flask-Mobility Flask-Script Flask-SQLAlchemy pip install -r requirements.txt

Slide 11

Slide 11 text

blah blah blah...

Slide 12

Slide 12 text

Setup $ virtualenv env $ source env/bin/activate (env)$ pip install --proxy 10.65.16.2:3128 Flask

Slide 13

Slide 13 text

"Hello World!" page from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '

Hello World!

' if __name__ == '__main__': app.run(debug=True) $ python hello.py * Running on http://127.0.0.1:5000/

Slide 14

Slide 14 text

Jinja2 Templates from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(name): return "Hello World!" @app.route('/hello/') def hello(name): return render_template(''hello.html", name=name) if __name__ == '__main__': app.run(debug=True)

Slide 15

Slide 15 text

templates/hello.html Hello {{name}}!

Hello {{name}}

Slide 16

Slide 16 text

pip install Flask-SQLAlchemy from flask import Flask, render_template from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SECRET_KEY'] = '53CR3TK3Y' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/bolao. sqlite' db = SQLAlchemy(app) @app.route('/') def index(name): return "Hello World!" ...

Slide 17

Slide 17 text

SQLAlchemy Models class User(db.Model): id = db.Column(db.Integer, primary_key=True) nome = db.Column(db.String(150)) email = db.Column(db.String(50), unique=True) def __repr__(self): return self.nome if __name__ == '__main__': # app.run(debug=True) db.create_all() user = User(nome="Jose", email="[email protected]") db.session.add(user) db.session.commit() print User.query.all()

Slide 18

Slide 18 text

pip install Flask-Admin from flask.ext.admin import Admin from flask.ext.admin.contrib.sqla import ModelView admin = Admin(app, 'Admin') admin.add_view(ModelView(User, db.session))

Slide 19

Slide 19 text

Flask Empty git config --global http.proxy 10.65.16.2:3128 git clone https://github.com/italomaia/flask-empty cp -r flask-empty/src bolao Enjoy it!

Slide 20

Slide 20 text

Bolão da Copa

Slide 21

Slide 21 text

_ X _ 12 de junho de 2014 - 15h00 Arena Corinthians BRA CRO

Slide 22

Slide 22 text

_ X _ 12 de junho de 2014 - 15h00 Arena Corinthians BRA CRO Data Local Placar Seleção A Seleção B

Slide 23

Slide 23 text

Enable Flask-SQLAlchemy Uncomment database.py and main.py Create models.py

Slide 24

Slide 24 text

Seleção from .database import db class Selecao(db.Model): id = db.Column(db.Integer, primary_key=True) nome = db.Column(db.String(50)) sigla = db.Column(db.String(3), unique=True) def __repr__(self): return self.nome

Slide 25

Slide 25 text

Jogo class Jogo(db.Model): id = db.Column(db.Integer, primary_key=True) local = db.Column(db.String(50)) datahora = db.Column(db.DateTime()) selecaoA_id = db.Column(db.Integer, db.ForeignKey('selecao.id')) selecaoA = db.relationship('Selecao', foreign_keys=selecaoA_id) selecaoB_id = db.Column(db.Integer, db.ForeignKey('selecao.id')) selecaoB = db.relationship('Selecao', foreign_keys=selecaoB_id) placarA = db.Column(db.Integer) placarB = db.Column(db.Integer) def __repr__(self): return u"%s x %s" % (self.selecaoA, self.selecaoB)

Slide 26

Slide 26 text

Configure Admin # edit main.py def configure_admin(app): from flask.ext.admin import Admin from flask.ext.admin.contrib.sqla import ModelView from .database import db from .models import Selecao, Jogo admin = Admin(app) admin.add_view(ModelView(Selecao, db.session)) admin.add_view(ModelView(Jogo, db.session))

Slide 27

Slide 27 text

Basics Base template (base.html): https://gist.github.com/tupy/10475935 Bandeiras: https://dl.dropboxusercontent. com/u/1497816/bolao/flags.zip (Extrair para static/images)

Slide 28

Slide 28 text

Listar Jogos {# templates/jogos.html #} {% extends 'base.html' %} {% block content %} {% for jogo in jogos -%}

{{jogo.selecaoA.sigla}}{{ '%d x %d' % (jogo.placarA, jogo.placarB) if jogo.placarA is number else 'x'}}{{jogo.selecaoB.sigla}}
{{jogo.datahora}}

{% endfor %} {% endblock %} {# Copy jogos.html from Gist #}

Slide 29

Slide 29 text

Listar Jogos # bolao/views.py () import flask from flask import render_template from bolao.models import Jogo app = flask.Blueprint('bolao', __name__) @app.route('/jogos') def jogos(): jogos = Jogo.query.order_by(Jogo.datahora) return render_template('jogos.html', jogos=jogos)

Slide 30

Slide 30 text

Aposta # edit models.py class Aposta(db.Model): id = db.Column(db.Integer, primary_key=True) usuario_id = db.Column(db.Integer, db.ForeignKey('usuario.id') usuario = db.relationship('Usuario', foreign_keys=usuario_id) jogo_id = db.Column(db.Integer, db.ForeignKey('jogo.id') jogo = db.relationship('Jogo', foreign_keys=jogo_id) apostaA = db.Column(db.Integer) apostaB = db.Column(db.Integer)

Slide 31

Slide 31 text

Listar com Apostas # edit bolao/views.py from bolao.models import Jogo, Aposta @app.route('/jogos') def jogos(): jogos = Jogo.query.order_by(Jogo.datahora) apostas = Aposta.query.filter_by(user=1) apostas = {aposta.jogo_id:aposta for aposta in apostas} return render_template('jogos_completo.html', jogos=jogos, apostas=apostas) {# Copy jogos_completo.html from Gist #}

Slide 32

Slide 32 text

Flask-Mobility

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Scrapy

Slide 36

Slide 36 text

games.json https://dl.dropboxusercontent.com/u/1497816/bolao/games.json

Slide 37

Slide 37 text

github.com/tupy/bolao

Slide 38

Slide 38 text