Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Quokka CMS - Content Management with Flask and Mongo #tdc2014

7,529 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

×