Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python na Copa

Python na Copa

A Copa do Mundo está chegando, que tal fazer um bolão para se divertir com seus amigos? Nesse minicurso iremos utilizar o framework Flask para criar uma aplicação web mobile onde você e seus amigos irão realizar suas apostas para os jogos da Copa do Mundo 2014. Ao final, os participantes terão aprendido como desenvolver uma aplicação simples em Flask e várias de suas extensões.

Osvaldo Matos Júnior

April 12, 2014
Tweet

More Decks by Osvaldo Matos Júnior

Other Decks in Programming

Transcript

  1. 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
  2. "Hello World!" page from flask import Flask app = Flask(__name__)

    @app.route('/') def index(): return '<h1>Hello World!</h1>' if __name__ == '__main__': app.run(debug=True) $ python hello.py * Running on http://127.0.0.1:5000/
  3. Jinja2 Templates from flask import Flask, render_template app = Flask(__name__)

    @app.route('/') def index(name): return "Hello World!" @app.route('/hello/<name>') def hello(name): return render_template(''hello.html", name=name) if __name__ == '__main__': app.run(debug=True)
  4. 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!" ...
  5. 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()
  6. 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))
  7. _ X _ 12 de junho de 2014 - 15h00

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

    Arena Corinthians BRA CRO Data Local Placar Seleção A Seleção B
  9. 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
  10. 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)
  11. 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))
  12. Listar Jogos {# templates/jogos.html #} {% extends 'base.html' %} {%

    block content %} {% for jogo in jogos -%} <p> {{jogo.selecaoA.sigla}}{{ '%d x %d' % (jogo.placarA, jogo.placarB) if jogo.placarA is number else 'x'}}{{jogo.selecaoB.sigla}} <br /> <small>{{jogo.datahora}}</small> </p> {% endfor %} {% endblock %} {# Copy jogos.html from Gist #}
  13. 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)
  14. 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)
  15. 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 #}