Quokka CMS - Content Management with Flask and Mongo #tdc2014

19

description

QUOKKA CMS, Flask and MongoDB powered content management system.

Transcript of Quokka CMS - Content Management with Flask and Mongo #tdc2014

Page 1: Quokka CMS - Content Management with Flask and Mongo #tdc2014
Page 2: Quokka CMS - Content Management with Flask and Mongo #tdc2014

Bruno Rocha@rochacbruno (everywhere)github.com/rochacbrunobrunorocha.orgpythonhub.com

Who?

Page 3: Quokka CMS - Content Management with Flask and Mongo #tdc2014

Why not Plone ?

Page 4: Quokka CMS - Content Management with Flask and Mongo #tdc2014

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!!!

Page 5: Quokka CMS - Content Management with Flask and Mongo #tdc2014

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...

Page 6: Quokka CMS - Content Management with Flask and Mongo #tdc2014

CMS(Produto)+ Zope Framework+ Zodb = NoSQL

Full StackFramework 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 = controleTrabalha bem com NoSQL

Crescimento gradativo

Page 7: Quokka CMS - Content Management with Flask and Mongo #tdc2014

WHY

?

● Leve● Flexivel (Schema less) = No migrations! :)● JSON (Python {}, JavaScript {})● Aggregation Framework / Pipelines

Page 8: Quokka CMS - Content Management with Flask and Mongo #tdc2014

It is not a framework, it is a pattern!

Good intentions

your_app.py

flask.ext.*

Page 9: Quokka CMS - Content Management with Flask and Mongo #tdc2014

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

Page 10: Quokka CMS - Content Management with Flask and Mongo #tdc2014

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 somewhere 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.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”)

Page 11: Quokka CMS - Content Management with Flask and Mongo #tdc2014

● flask.ext.○ Security○ Social-login○ Rest○ Mail○ Admin○ Gravatar○ Cache○ SQLAlchemy○ MongoEngine○ RiakAlchemy○ Assets○ Script○ Celery○ Mobile○ Testing○ Babel○ WTForms○ ...

Page 12: Quokka CMS - Content Management with Flask and Mongo #tdc2014

Se e

u fo

sse

você

eu

usar

ia…

.

● 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”)

Page 13: Quokka CMS - Content Management with Flask and Mongo #tdc2014

● 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

Page 14: Quokka CMS - Content Management with Flask and Mongo #tdc2014

CONTENT ADMIN

Page 15: Quokka CMS - Content Management with Flask and Mongo #tdc2014

CONTENT EDITORS (markdown / html)

Page 16: Quokka CMS - Content Management with Flask and Mongo #tdc2014

MEDIA MANAGEMENT

Page 17: Quokka CMS - Content Management with Flask and Mongo #tdc2014

MODULES

Page 18: Quokka CMS - Content Management with Flask and Mongo #tdc2014

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….

Page 19: Quokka CMS - Content Management with Flask and Mongo #tdc2014

Thank you!www.quokkaproject.org