what the flask? and how to use it with some google apis
DESCRIPTION
Tech Talk for Google Developer Bus Brasil 2013TRANSCRIPT
Bruno [email protected]
http://github.com/rochacbrunohttp://twitter.com.rochacbruno http://brunorocha.orghttp://pythonhub.com
CADEMY
Who?
www.quokkaproject.org
Full StackFramework Micro Framework
Faz as escolhas por você e oferece uma plataforma completa
(ORM, Templates, Organização de arquivos, arquivos de configurações, etc)
+ Fácil- controle
Define apenas o básico(WSGI, request, response, session etc)
Crescimento gradativo+ trabalhoso
+ controle
Flask is a microframework for Python based on Werkzeug, Jinja 2 and good intentions.
What The Flask?
Werkzeug - WSGI library
from werkzeug.serving import run_simple
from werkzeug.wrappers import Request, Response
@Request.applicationdef application(request): return Response('Hello World!')
run_simple('localhost', 4000, application)
Jinja - Template engine
{% from _above_file.html import render_user %}<title>{% block title %}{% endblock %}</title><ul>{% for user in users %} {{ render_user(user) }}{% endfor %}</ul>
{% macro render_user(user) %}<li><a href="{{ user.url }}">{{ user.username }}</a></li>{% endmacro %}
Good intentions.
# thread localsfrom flask import request, session, g
# extensionsfrom flask.ext import AmazingExtension
# blueprintsfrom flask import Blueprintblog = Blueprint(“blog_blueprint”)blog.template_folder = “path/to/folder”blog.static_folder = “path/to/static”
# Application factoryapp = create_app(**kwargs) app.register_blueprint(blog)AmazingExtension(app)
It is not a framework, it is a pattern!
Good intentions
your_app.py
flask.ext.*
from flask import Flaskfrom flask.ext.security import Securityfrom flask.ext.admin import Adminfrom somewhere.db.models import UserDatastorefrom somewhere.views import indexpage
def create_app(**config): app = Flask(“myapp”) app.config_from_object(config) Admin(app) Security(app, UserDatastore) app.add_url_rule(“/index/<something>”, view_func=indexpage) return app
if __name__ == “__main__”: app = create_app(SECRET_KEY=”XYZ”) app.run()
your_app.py
$ pip install flask, flask-security, flask-admin, xpto-orm
BlueprintsUm Blueprint funciona de forma similar a um objeto Flask, mas na verdade não é uma aplicação, mas sim um projeto de como construir ou extender uma aplicação
from blog_blueprint import blog_extension
def create_app(**config): app = Flask(“myapp”) ... app.register_blueprint(blog_extension) return app
from flask import Blueprint, render_templateblog_extension = Blueprint(“my_blog_extension”)blog_extension.endpoint = “/blog”blog_extension.template_folder = “path/to/blog_templates”blog_extension.static_folder = “path/to/blog_static” @blog_extension.route(“/index”)def blog(): posts = some_db_or_orm.posts.query() return render_template(“blog.html”, posts=posts)
your_app.py
blog_blueprint.py
● Flask subclass○ class MyOwnFlask(Flask):
pass● application factory
○ app = create_app(**config)○ evitar import circular
● Blueprints○ Mesmo que seja uma one-page-app
● Flask-Admin○ Modular, insira qualquer view no admin, crud completo, actions, filters
● Flask-Security○ Login, Logout, Lembrar senha, Register, Access control, permissions
● Flask-script○ python manage.py faça_me_um_sanduiche
● app.config_from_envvar○ Settings desacoplado da app○ export APP_SETTINGS=”/path/to/settings.cfg”○ app.config_from_envvar(“APP_SETTINGS”)
and Google ?
# app.yamlapplication : nome_do_appversion : 1runtime : python27api_version : 1threadsafe: true
libraries:- name: jinja2 version: "2.6"- name: markupsafe version: "0.15"
handlers:- url: /static static_dir : your_app_folder/static- url: .* script : main.app
# your_app.pyfrom flask import Flask
def create_app(): app = Flask(__name__) return app
# main.pyfrom werkzeug import DebuggedApplicationfrom your_app import create_appapp = DebuggedApplication(create_app())
http://bit.ly/flask-gae
# your_app.py
from flask import Flask from flask.ext.googleauth import GoogleFederatedfrom .configurator import register_views
def create_app(): app = Flask(__name__) app.secret_key = “XYZ” auth = GoogleFederated("dominio.com", app)
register_views(app, auth) return app
https://github.com/sashka/flask-googleauth
# configurator.pyfrom .views import myview, …, ...
def register_views(app, auth) secret = auth.required(myview) app.add_url_rule(“/secret/”, view_func=secret) … ...
# views.pyfrom flask import g
def myview() return "Logged user, %s (%s)" % (g.user.name, g.user.email)…...
github.com/rochacbruno/Flask-GoogleMaps
pip install flask-googlemaps
from flask import Flaskfrom flask.ext.googlemaps import GoogleMaps
app = Flask(__name__)GoogleMaps(app)
<div>{{googlemap("my_awesome_map", 0.23234234, -0.234234234, markers=[(0.12, -0.45345), ...])}}</div>
Bruno Rochahttp://[email protected]
http://github.com/rochacbrunohttp://twitter.com.rochacbruno http://pythonhub.com
www.quokkaproject.org
Thank you!