Quokka CMS - Content Management with Flask and Mongo #tdc2014

7,039 views

Published on

QUOKKA CMS, Flask and MongoDB powered content management system.

Published in: Internet

Quokka CMS - Content Management with Flask and Mongo #tdc2014

  1. 1. Bruno Rocha @rochacbruno (everywhere) github.com/rochacbruno brunorocha.org pythonhub.com Who?
  2. 2. Why not Plone ?
  3. 3. 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!!!
  4. 4. 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...
  5. 5. 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
  6. 6. WHY ? ● Leve ● Flexivel (Schema less) = No migrations! :) ● JSON (Python {}, JavaScript {}) ● Aggregation Framework / Pipelines
  7. 7. It is not a framework, it is a pattern! Good intentions your_app.py flask.ext.*
  8. 8. 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
  9. 9. 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”)
  10. 10. ● flask.ext. ○ Security ○ Social-login ○ Rest ○ Mail ○ Admin ○ Gravatar ○ Cache ○ SQLAlchemy ○ MongoEngine ○ RiakAlchemy ○ Assets ○ Script ○ Celery ○ Mobile ○ Testing ○ Babel ○ WTForms ○ ...
  11. 11. 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”)
  12. 12. ● 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
  13. 13. CONTENT ADMIN
  14. 14. CONTENT EDITORS (markdown / html)
  15. 15. MEDIA MANAGEMENT
  16. 16. MODULES
  17. 17. 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….
  18. 18. Thank you! www.quokkaproject.org

×