Bruno Rocha
@rochacbruno (everywhere)
github.com/rochacbruno
brunorocha.org
pythonhub.com
Who?
Why not Plone ?
Features
● Organização de conteúdo
○ Canais, Categorias, Tags, Slugs, Redirects
● Criação e edição de conteúdo
○ Formulários, API, crawlers
● Controle de acesso e permissões
○ RBAC, Multi autores
● Indexação e busca
● Interação social
○ login, comments, share
● Recomendação
● Versionamento
● Multimedia
● Extensões/Plugins
● Instalação automatizada
● Temas!!!
Where it hurts?
● Flexibilidade
○ Campos customizados
○ Validadores customizados
● Esquema de banco de dados
○ Schema migrations
● Código único
○ Incluir novas features para sites específicos sem
quebrar o source e a modelagem do banco
● Performance
○ Manter a performance sem precisar de engenharia
de denormalização
Relacional
Postgres hstore… maybe...
CMS(Produto)
+ Zope Framework
+ Zodb = NoSQL
Full Stack
Framework
Micro Framework
Baterias incluídas, com
“overhead”. (tem muito mais do
que o necessário e não é fácil
refinar e exige conhecimento de
Zope)
Faz as escolhas por você
ORM, Templates, Organização
de arquivos, organização de
settings.
Mais escolhas = controle
Trabalha bem com NoSQL
Crescimento gradativo
WHY
?
● Leve
● Flexivel (Schema less) = No migrations! :)
● JSON (Python {}, JavaScript {})
● Aggregation Framework / Pipelines
It is not a framework, it is a pattern!
Good intentions
your_app.py
flask.ext.*
from flask import Flask
from flask.ext.security import Security
from flask.ext.admin import Admin
from somewhere.db.models import UserDatastore
from 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
Blueprints
Um 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 somewhere import blog_extension
def create_app(**config):
app = Flask(“myapp”)
...
app.register_blueprint(blog_extension)
return app
from flask import Blueprint, render_template
blog_extension = Blueprint(“my_blog_extension”)
blog_extension.endpoint = “/blog”
blog_extension.templates_folder = “path/to/blog_templates”
blog_extension.static_folder = “path/to/blog_static”
@blog_extension.route(“/index”)
def blog():
return render_template(“blog.html”)
● flask.ext.
○ Security
○ Social-login
○ Rest
○ Mail
○ Admin
○ Gravatar
○ Cache
○ SQLAlchemy
○ MongoEngine
○ RiakAlchemy
○ Assets
○ Script
○ Celery
○ Mobile
○ Testing
○ Babel
○ WTForms
○ ...
Seeufossevocêeuusaria….
● Flask subclass
○ class MyOwnFlask(Flask)
● application factory
○ app = create_app(**config)
○ evita 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”)
● Admin customizavel e extensível
● Import/Export
● Controle de acesso
● Scripts para deploy, teste, execução
● Extensível através de módulos
● Multi temas
● Canais e urls amigavéis
● Celery ready!
● Rest API
● Multimedia management (Gallery, Images)
● Configurações flexiveis via admin
● MongoDB
Abra uma issue ou mande um pull request em
http://www.quokkaproject.org
CONTENT ADMIN
CONTENT EDITORS (markdown / html)
MEDIA MANAGEMENT
MODULES
Next step: Quokka as a Framework on top of Flask
$ quokka start_project
$ quokka start_module
$ quokka start_theme
$ quokka register theme
$ quokka install theme
$ quokka register module
$ quokka install module
$ quokka deploy --heroku --user….
Thank you!
www.quokkaproject.org

Quokka CMS - Content Management with Flask and Mongo #tdc2014

  • 2.
  • 3.
  • 4.
    Features ● Organização deconteúdo ○ Canais, Categorias, Tags, Slugs, Redirects ● Criação e edição de conteúdo ○ Formulários, API, crawlers ● Controle de acesso e permissões ○ RBAC, Multi autores ● Indexação e busca ● Interação social ○ login, comments, share ● Recomendação ● Versionamento ● Multimedia ● Extensões/Plugins ● Instalação automatizada ● Temas!!!
  • 5.
    Where it hurts? ●Flexibilidade ○ Campos customizados ○ Validadores customizados ● Esquema de banco de dados ○ Schema migrations ● Código único ○ Incluir novas features para sites específicos sem quebrar o source e a modelagem do banco ● Performance ○ Manter a performance sem precisar de engenharia de denormalização Relacional Postgres hstore… maybe...
  • 6.
    CMS(Produto) + Zope Framework +Zodb = NoSQL Full Stack Framework Micro Framework Baterias incluídas, com “overhead”. (tem muito mais do que o necessário e não é fácil refinar e exige conhecimento de Zope) Faz as escolhas por você ORM, Templates, Organização de arquivos, organização de settings. Mais escolhas = controle Trabalha bem com NoSQL Crescimento gradativo
  • 7.
    WHY ? ● Leve ● Flexivel(Schema less) = No migrations! :) ● JSON (Python {}, JavaScript {}) ● Aggregation Framework / Pipelines
  • 8.
    It is nota framework, it is a pattern! Good intentions your_app.py flask.ext.*
  • 9.
    from flask importFlask from flask.ext.security import Security from flask.ext.admin import Admin from somewhere.db.models import UserDatastore from 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
  • 10.
    Blueprints Um Blueprint funcionade 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 somewhere import blog_extension def create_app(**config): app = Flask(“myapp”) ... app.register_blueprint(blog_extension) return app from flask import Blueprint, render_template blog_extension = Blueprint(“my_blog_extension”) blog_extension.endpoint = “/blog” blog_extension.templates_folder = “path/to/blog_templates” blog_extension.static_folder = “path/to/blog_static” @blog_extension.route(“/index”) def blog(): return render_template(“blog.html”)
  • 11.
    ● flask.ext. ○ Security ○Social-login ○ Rest ○ Mail ○ Admin ○ Gravatar ○ Cache ○ SQLAlchemy ○ MongoEngine ○ RiakAlchemy ○ Assets ○ Script ○ Celery ○ Mobile ○ Testing ○ Babel ○ WTForms ○ ...
  • 12.
    Seeufossevocêeuusaria…. ● Flask subclass ○class MyOwnFlask(Flask) ● application factory ○ app = create_app(**config) ○ evita 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”)
  • 13.
    ● Admin customizavele extensível ● Import/Export ● Controle de acesso ● Scripts para deploy, teste, execução ● Extensível através de módulos ● Multi temas ● Canais e urls amigavéis ● Celery ready! ● Rest API ● Multimedia management (Gallery, Images) ● Configurações flexiveis via admin ● MongoDB Abra uma issue ou mande um pull request em http://www.quokkaproject.org
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    Next step: Quokkaas a Framework on top of Flask $ quokka start_project $ quokka start_module $ quokka start_theme $ quokka register theme $ quokka install theme $ quokka register module $ quokka install module $ quokka deploy --heroku --user….
  • 19.