Full Stack
Desenvolvendo um CMS com Flask e MongoDB
Who?

CADEMY

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 {})
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...
Thank you!
www.quokkaproject.org
Upcoming SlideShare
Loading in...5
×

Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

985

Published on

Utilizar Flask + extensões para desenvolver uma plataforma full-stack com os recursos de auth, controle de acesso, assets, commands, celery tasks, interface admin customizavel, cache entre outras coisas. Falarei sobre minha experiência desenvolvendo o Quokka CMS http://www.quokkaproject.org que é um CMS desenvolvido com Flask e Mongo DB.

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
  • Camarada, muito legal seus slides. Estou 'começando agora' no mundo python e flask, digamos assim, e vi uns conceitos interessantes aplicados no que você fez e queria me aprofundar.

    NO slide 16, você coloca: Se eu fosse você eu usaria ... tem algum artigo onde você se baseou ou mesmo que você tenha escrito que explique melhor como usar estes conceitos de app factory, blueprints, no desenvolvimento de sites em flask ?

    No slide 17 você vem com o conceito de Dispatcher Middleware. Algum artigo onde aprofundar ?

    Estou com um projeto pessoal e queria começar ele já usando flask.

    Você usou mongoDB em detrimento de qualquer outro banco relacional ?

    Valeu.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
985
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

  1. 1. Full Stack Desenvolvendo um CMS com Flask e MongoDB
  2. 2. Who? CADEMY 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 {})
  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. Thank you! www.quokkaproject.org
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×