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.
Full Stack
Desenvolvendo um CMS com Flask e MongoDB
Application Framework
Who?

Bruno Rocha
@rochacbruno
http://github.com/rochacbruno
http://rochacbruno.com.br
http://pythonhub.com
What?

Content Management System
Sistema de Gerenciamento de Conteúdo é um aplicativo usado para criar, editar,
gerenciar ...
For

●
●
●
●
●
●
●
●
●
●

Blog
Wiki
Forum
Documentação
Portal
Site institucional
Rede social
Intranet
GED/ECM
…
You ?
1999

2003

2007

2010

2013

2014

Movuca Social CMS

www.web2pyslices.com , www.menuvegano.com.br

www.virgula.com...
Why not Plone ?
Produto ou Plataforma?
● Pronto para usar
● Pré definições
● Configuração mínima
● Instalação automatizada
● Boilerplate
●...
Features

●

Organização de conteúdo
○

●

Criação e edição de conteúdo
○

●

RBAC, Multi autores

Indexação e busca
Inter...
Where it hurts?
●

●
●

●

Flexibilidade
○ Campos customizados
○ Validadores customizados
Esquema de banco de dados
○ Sche...
CMS(Produto)
+ Zope Framework
+ Zodb = NoSQL

Full Stack
Framework

Micro Framework

Baterias incluídas, com
“overhead”. (...
WHY
?
●
●
●
●

Leve
Flexivel (Schema less) = No migrations! :)
JSON (Python {}, JavaScript {})
Aggregation Framework / Pip...
It is not a framework, it is a pattern!

Good intentions

flask.ext.*
your_app.py
your_app.py
$ pip install flask, flask-security, flask-admin, xpto-orm
from
from
from
from
from

flask import Flask
flask....
Blueprints
Um Blueprint funciona de forma similar a um objeto Flask, mas na verdade não
é uma aplicação, mas sim um projet...
●

flask.ext.
○ Security
○ Social-login
○ Rest
○ Mail
○ Admin
○ Gravatar
○ Cache
○ SQLAlchemy
○ MongoEngine
○ RiakAlchemy
...
Flask subclass
○ class MyOwnFlask(Flask)

●

Se eu fosse você eu usaria….

●

application factory
○ app = create_app(**con...
Dispatcher Middleware
wsgi.py
from werkzeug.wsgi import DispatcherMiddleware
import your_app, another_app, api

applicatio...
●
●
●
●
●
●
●
●
●
●
●
●

Admin customizavel e extensível
Import/Export
Controle de acesso
Scripts para deploy, teste, exec...
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
$ quok...
Thank you!
www.quokkaproject.org
Upcoming SlideShare
Loading in …5
×

Flask for CMS/App Framework development.

1,280 views

Published on

Palestra na Python MG (Universidade Federal de Lavras) em 25/01/2014

Published in: Technology

Flask for CMS/App Framework development.

  1. 1. Full Stack Desenvolvendo um CMS com Flask e MongoDB Application Framework
  2. 2. Who? Bruno Rocha @rochacbruno http://github.com/rochacbruno http://rochacbruno.com.br http://pythonhub.com
  3. 3. What? Content Management System Sistema de Gerenciamento de Conteúdo é um aplicativo usado para criar, editar, gerenciar e publicar conteúdo de forma consistentemente organizada. O conteúdo pode incluir arquivos, imagens, áudios, vídeos, documentos eletrônicos e conteúdo Web. Podemos dizer que um CMS é semelhante a um framework (um esqueleto) de website préestruturado, com recursos básicos de: usabilidade, visualização e segurança e administração já prontamente disponíveis. wikipedia
  4. 4. For ● ● ● ● ● ● ● ● ● ● Blog Wiki Forum Documentação Portal Site institucional Rede social Intranet GED/ECM …
  5. 5. You ? 1999 2003 2007 2010 2013 2014 Movuca Social CMS www.web2pyslices.com , www.menuvegano.com.br www.virgula.com.br, www.jovempan.com.br demo.quokkaproject.org, www.quokkaproject.org
  6. 6. Why not Plone ?
  7. 7. Produto ou Plataforma? ● Pronto para usar ● Pré definições ● Configuração mínima ● Instalação automatizada ● Boilerplate ● settings via admin Wordpress, Joomla, Plone, Django CMS, Mezzanine, Quokka... ● ● ● ● Desacoplado Integrável Montável settings via código SharePoint, Liferay, Pinax, Opps
  8. 8. Features ● Organização de conteúdo ○ ● Criação e edição de conteúdo ○ ● RBAC, Multi autores Indexação e busca Interação social ○ ● ● ● ● ● ● Formulários, API, crawlers Controle de acesso e permissões ○ ● ● Canais, Categorias, Tags, Slugs, Redirects login, comments, share Recomendação Versionamento Multimedia Extensões/Plugins Instalação automatizada Temas!!!
  9. 9. 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...
  10. 10. 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
  11. 11. WHY ? ● ● ● ● Leve Flexivel (Schema less) = No migrations! :) JSON (Python {}, JavaScript {}) Aggregation Framework / Pipelines
  12. 12. It is not a framework, it is a pattern! Good intentions flask.ext.* your_app.py
  13. 13. your_app.py $ pip install flask, flask-security, flask-admin, xpto-orm from from from from from flask import Flask flask.ext.security import Security flask.ext.admin import Admin somewhere.db.models import UserDatastore 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()
  14. 14. 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 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”) from somewhere import blog_extension def create_app(**config): app = Flask(“myapp”) ... app.register_blueprint(blog_extension) return app
  15. 15. ● flask.ext. ○ Security ○ Social-login ○ Rest ○ Mail ○ Admin ○ Gravatar ○ Cache ○ SQLAlchemy ○ MongoEngine ○ RiakAlchemy ○ Assets ○ Script ○ Celery ○ Mobile ○ Testing ○ Babel ○ WTForms ○ ...
  16. 16. Flask subclass ○ class MyOwnFlask(Flask) ● Se eu fosse você eu usaria…. ● 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”)
  17. 17. Dispatcher Middleware wsgi.py from werkzeug.wsgi import DispatcherMiddleware import your_app, another_app, api application = DispatcherMiddleware( your_app.create_app(), # vai servir na raiz '/' { '/outrosite': another_app.create_app(), '/api': api.create_app(), ... } )
  18. 18. ● ● ● ● ● ● ● ● ● ● ● ● 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
  19. 19. CONTENT ADMIN
  20. 20. CONTENT EDITORS (markdown / html)
  21. 21. MEDIA MANAGEMENT
  22. 22. MODULES
  23. 23. 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….
  24. 24. Thank you! www.quokkaproject.org

×