SlideShare uma empresa Scribd logo
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 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
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.br, www.jovempan.com.br

demo.quokkaproject.org, www.quokkaproject.org
Why not Plone ?
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
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!!!
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...
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
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.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()
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
●

flask.ext.
○ Security
○ Social-login
○ Rest
○ Mail
○ Admin
○ Gravatar
○ Cache
○ SQLAlchemy
○ MongoEngine
○ RiakAlchemy
○ Assets
○ Script
○ Celery
○ Mobile
○ Testing
○ Babel
○ WTForms
○ ...
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”)
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(),
...
}
)
●
●
●
●
●
●
●
●
●
●
●
●

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
Thank you!
www.quokkaproject.org

Mais conteúdo relacionado

Mais procurados (20)

Php além do LAMP
Php além do LAMPPhp além do LAMP
Php além do LAMP
Thiago Paes
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
Artur Felipe Sousa
 
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutençãoGerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
spirallab
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
Thiago Paes
 
Construindo sites e sistemas com WordPress
Construindo sites e sistemas com WordPressConstruindo sites e sistemas com WordPress
Construindo sites e sistemas com WordPress
Leo Baiano
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
Thiago Paes
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
Thiago Paes
 
Quem tem medo do terminal?
Quem tem medo do terminal?Quem tem medo do terminal?
Quem tem medo do terminal?
Rafael Funchal
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Tchelinux
 
Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)
Rodrigo Serradura
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
Fábio Nogueira de Lucena
 
Spring boot
Spring bootSpring boot
Spring boot
Bruno Coan
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
Michael Douglas
 
Dominando o customizer
Dominando o customizerDominando o customizer
Dominando o customizer
Nícholas André
 
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Leo Baiano
 
React - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UIReact - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UI
Cleiton Francisco
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
Michael Douglas
 
Html5
Html5Html5
Html5
SouWebPel Grupo
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013
Guga Alves
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
Douglas V. Pasqua
 
Php além do LAMP
Php além do LAMPPhp além do LAMP
Php além do LAMP
Thiago Paes
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
Artur Felipe Sousa
 
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutençãoGerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
spirallab
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
Thiago Paes
 
Construindo sites e sistemas com WordPress
Construindo sites e sistemas com WordPressConstruindo sites e sistemas com WordPress
Construindo sites e sistemas com WordPress
Leo Baiano
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
Thiago Paes
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
Thiago Paes
 
Quem tem medo do terminal?
Quem tem medo do terminal?Quem tem medo do terminal?
Quem tem medo do terminal?
Rafael Funchal
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Tchelinux
 
Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)Turbolinks 5 + PWA (Progressive Web Apps)
Turbolinks 5 + PWA (Progressive Web Apps)
Rodrigo Serradura
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
Michael Douglas
 
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Leo Baiano
 
React - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UIReact - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UI
Cleiton Francisco
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
Michael Douglas
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013
Guga Alves
 

Destaque (15)

Build website in_django
Build website in_django Build website in_django
Build website in_django
swee meng ng
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
juzten
 
Python and GIS
Python and GISPython and GIS
Python and GIS
Andrii Mishkovskyi
 
Writing your first web app using Python and Flask
Writing your first web app using Python and FlaskWriting your first web app using Python and Flask
Writing your first web app using Python and Flask
Danielle Madeley
 
Django para portais de alta visibilidade. tdc 2013
Django para portais de alta visibilidade.   tdc 2013Django para portais de alta visibilidade.   tdc 2013
Django para portais de alta visibilidade. tdc 2013
Bruno Rocha
 
Introduction to Google App Engine with Python
Introduction to Google App Engine with PythonIntroduction to Google App Engine with Python
Introduction to Google App Engine with Python
Brian Lyttle
 
Flask patterns
Flask patternsFlask patterns
Flask patterns
it-people
 
Desenvolvendo APPs Com Angular.JS + Cordova
Desenvolvendo APPs Com Angular.JS �+ CordovaDesenvolvendo APPs Com Angular.JS �+ Cordova
Desenvolvendo APPs Com Angular.JS + Cordova
Gustavo Costa
 
Python Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIPython Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CI
Bruno Rocha
 
Making use of OpenStreetMap data with Python
Making use of OpenStreetMap data with PythonMaking use of OpenStreetMap data with Python
Making use of OpenStreetMap data with Python
Andrii Mishkovskyi
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
Max Claus Nunes
 
Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015
Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015
Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015
Bruno Rocha
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
Bruno Rocha
 
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoCurso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Loiane Groner
 
OpenStreetMap in 3D using Python
OpenStreetMap in 3D using PythonOpenStreetMap in 3D using Python
OpenStreetMap in 3D using Python
Martin Christen
 
Build website in_django
Build website in_django Build website in_django
Build website in_django
swee meng ng
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
juzten
 
Writing your first web app using Python and Flask
Writing your first web app using Python and FlaskWriting your first web app using Python and Flask
Writing your first web app using Python and Flask
Danielle Madeley
 
Django para portais de alta visibilidade. tdc 2013
Django para portais de alta visibilidade.   tdc 2013Django para portais de alta visibilidade.   tdc 2013
Django para portais de alta visibilidade. tdc 2013
Bruno Rocha
 
Introduction to Google App Engine with Python
Introduction to Google App Engine with PythonIntroduction to Google App Engine with Python
Introduction to Google App Engine with Python
Brian Lyttle
 
Flask patterns
Flask patternsFlask patterns
Flask patterns
it-people
 
Desenvolvendo APPs Com Angular.JS + Cordova
Desenvolvendo APPs Com Angular.JS �+ CordovaDesenvolvendo APPs Com Angular.JS �+ Cordova
Desenvolvendo APPs Com Angular.JS + Cordova
Gustavo Costa
 
Python Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIPython Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CI
Bruno Rocha
 
Making use of OpenStreetMap data with Python
Making use of OpenStreetMap data with PythonMaking use of OpenStreetMap data with Python
Making use of OpenStreetMap data with Python
Andrii Mishkovskyi
 
Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015
Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015
Data Developer - Engenharia de Dados em um time de Data Science - Uai python2015
Bruno Rocha
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
Bruno Rocha
 
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoCurso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Loiane Groner
 
OpenStreetMap in 3D using Python
OpenStreetMap in 3D using PythonOpenStreetMap in 3D using Python
OpenStreetMap in 3D using Python
Martin Christen
 
Anúncio

Semelhante a Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB (20)

Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
Igor Sobreira
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
Rodrigo Nossal
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel PetryPython mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Tchelinux
 
Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internet
Marcos Petry
 
Django Básico
Django BásicoDjango Básico
Django Básico
Joffily Ferreira
 
Django
DjangoDjango
Django
flisolmaringa
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
Felipe Queiroz
 
Jugvale
JugvaleJugvale
Jugvale
Renzo Nuccitelli
 
Python 06
Python 06Python 06
Python 06
Bruno Catão
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!
Ryan Padilha
 
Desmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest FrameworkDesmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest Framework
Bruno Oliveira
 
Introdução ao framework Django
Introdução ao framework DjangoIntrodução ao framework Django
Introdução ao framework Django
Eduardo Palma
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
Rafael Sales Pavarina
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
Marcelo Santos
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
Vinicius Mendes
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
Relsi Maron
 
Python 08
Python 08Python 08
Python 08
Bruno Catão
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
Fabio Janiszevski
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
antonio sérgio nogueira
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
Igor Sobreira
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
Rodrigo Nossal
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel PetryPython mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Tchelinux
 
Python mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internetPython mudando o modo de desenvolver para a internet
Python mudando o modo de desenvolver para a internet
Marcos Petry
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
Felipe Queiroz
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!
Ryan Padilha
 
Desmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest FrameworkDesmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest Framework
Bruno Oliveira
 
Introdução ao framework Django
Introdução ao framework DjangoIntrodução ao framework Django
Introdução ao framework Django
Eduardo Palma
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
Rafael Sales Pavarina
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
Vinicius Mendes
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
Relsi Maron
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
Fabio Janiszevski
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
antonio sérgio nogueira
 
Anúncio

Mais de Bruno Rocha (9)

The quality of the python ecosystem - and how we can protect it!
The quality of the python ecosystem - and how we can protect it!The quality of the python ecosystem - and how we can protect it!
The quality of the python ecosystem - and how we can protect it!
Bruno Rocha
 
A Qualidade do Ecossistema Python - e o que podemos fazer para mante-la
A Qualidade do Ecossistema Python - e o que podemos fazer para mante-laA Qualidade do Ecossistema Python - e o que podemos fazer para mante-la
A Qualidade do Ecossistema Python - e o que podemos fazer para mante-la
Bruno Rocha
 
Carreira de Programador e Mercado de Trabalho
Carreira de Programador e Mercado de TrabalhoCarreira de Programador e Mercado de Trabalho
Carreira de Programador e Mercado de Trabalho
Bruno Rocha
 
Web Crawling Modeling with Scrapy Models #TDC2014
Web Crawling Modeling with Scrapy Models #TDC2014Web Crawling Modeling with Scrapy Models #TDC2014
Web Crawling Modeling with Scrapy Models #TDC2014
Bruno Rocha
 
What The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIsWhat The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIs
Bruno Rocha
 
Guia alimentar de dietas vegetarianas para adultos
Guia alimentar de dietas vegetarianas para adultosGuia alimentar de dietas vegetarianas para adultos
Guia alimentar de dietas vegetarianas para adultos
Bruno Rocha
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
Bruno Rocha
 
Using web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworksUsing web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworks
Bruno Rocha
 
Desenvolvimento web ágil com Python e web2py #qconsp #qcon
Desenvolvimento web ágil com Python e web2py #qconsp #qconDesenvolvimento web ágil com Python e web2py #qconsp #qcon
Desenvolvimento web ágil com Python e web2py #qconsp #qcon
Bruno Rocha
 
The quality of the python ecosystem - and how we can protect it!
The quality of the python ecosystem - and how we can protect it!The quality of the python ecosystem - and how we can protect it!
The quality of the python ecosystem - and how we can protect it!
Bruno Rocha
 
A Qualidade do Ecossistema Python - e o que podemos fazer para mante-la
A Qualidade do Ecossistema Python - e o que podemos fazer para mante-laA Qualidade do Ecossistema Python - e o que podemos fazer para mante-la
A Qualidade do Ecossistema Python - e o que podemos fazer para mante-la
Bruno Rocha
 
Carreira de Programador e Mercado de Trabalho
Carreira de Programador e Mercado de TrabalhoCarreira de Programador e Mercado de Trabalho
Carreira de Programador e Mercado de Trabalho
Bruno Rocha
 
Web Crawling Modeling with Scrapy Models #TDC2014
Web Crawling Modeling with Scrapy Models #TDC2014Web Crawling Modeling with Scrapy Models #TDC2014
Web Crawling Modeling with Scrapy Models #TDC2014
Bruno Rocha
 
What The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIsWhat The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIs
Bruno Rocha
 
Guia alimentar de dietas vegetarianas para adultos
Guia alimentar de dietas vegetarianas para adultosGuia alimentar de dietas vegetarianas para adultos
Guia alimentar de dietas vegetarianas para adultos
Bruno Rocha
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
Bruno Rocha
 
Using web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworksUsing web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworks
Bruno Rocha
 
Desenvolvimento web ágil com Python e web2py #qconsp #qcon
Desenvolvimento web ágil com Python e web2py #qconsp #qconDesenvolvimento web ágil com Python e web2py #qconsp #qcon
Desenvolvimento web ágil com Python e web2py #qconsp #qcon
Bruno Rocha
 

Último (8)

Aula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linearAula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linear
EmliaNogueira5
 
Aula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, PolimorfismoAula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, Polimorfismo
EmliaNogueira5
 
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho ConcurdeFuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Rodolpho Concurde
 
Trailblazer Community de São Paulo - Explorando APEX
Trailblazer Community de São Paulo - Explorando APEXTrailblazer Community de São Paulo - Explorando APEX
Trailblazer Community de São Paulo - Explorando APEX
Francisco Vieira Júnior
 
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdfTrabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
JuanMalafaia
 
sistemaoperacionalauladf=etecnologiaasss
sistemaoperacionalauladf=etecnologiaassssistemaoperacionalauladf=etecnologiaasss
sistemaoperacionalauladf=etecnologiaasss
ykira3820
 
Open Source: Ferramentas Gratuitas Incríveis
Open Source: Ferramentas Gratuitas IncríveisOpen Source: Ferramentas Gratuitas Incríveis
Open Source: Ferramentas Gratuitas Incríveis
Danilo Pinotti
 
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações  sobre Aspectos Normativos do Projeto de Estruturas de ConcretoConsiderações  sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
NicforoMedeiros1
 
Aula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linearAula de Pesquisa Operacional Revisão de Álgebra linear
Aula de Pesquisa Operacional Revisão de Álgebra linear
EmliaNogueira5
 
Aula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, PolimorfismoAula de POO, Herança, Composição, Polimorfismo
Aula de POO, Herança, Composição, Polimorfismo
EmliaNogueira5
 
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho ConcurdeFuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Fuzzing: Finding Your Own Bugs and 0days! 2.0 PT-BR by Rodolpho Concurde
Rodolpho Concurde
 
Trailblazer Community de São Paulo - Explorando APEX
Trailblazer Community de São Paulo - Explorando APEXTrailblazer Community de São Paulo - Explorando APEX
Trailblazer Community de São Paulo - Explorando APEX
Francisco Vieira Júnior
 
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdfTrabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
Trabalho Informática 2040 Eduardo Gomes - Carrinho Bluetooth.pdf
JuanMalafaia
 
sistemaoperacionalauladf=etecnologiaasss
sistemaoperacionalauladf=etecnologiaassssistemaoperacionalauladf=etecnologiaasss
sistemaoperacionalauladf=etecnologiaasss
ykira3820
 
Open Source: Ferramentas Gratuitas Incríveis
Open Source: Ferramentas Gratuitas IncríveisOpen Source: Ferramentas Gratuitas Incríveis
Open Source: Ferramentas Gratuitas Incríveis
Danilo Pinotti
 
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações  sobre Aspectos Normativos do Projeto de Estruturas de ConcretoConsiderações  sobre Aspectos Normativos do Projeto de Estruturas de Concreto
Considerações sobre Aspectos Normativos do Projeto de Estruturas de Concreto
NicforoMedeiros1
 

Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

  • 1. Full Stack Desenvolvendo um CMS com Flask e MongoDB
  • 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
  • 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
  • 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. 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. 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. 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. WHY ? ● Leve ● Flexivel (Schema less) = No migrations! :) ● JSON (Python {}, JavaScript {})
  • 12. It is not a framework, it is a pattern! Good intentions flask.ext.* your_app.py
  • 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. 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. ● flask.ext. ○ Security ○ Social-login ○ Rest ○ Mail ○ Admin ○ Gravatar ○ Cache ○ SQLAlchemy ○ MongoEngine ○ RiakAlchemy ○ Assets ○ Script ○ Celery ○ Mobile ○ Testing ○ Babel ○ WTForms ○ ...
  • 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. 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. ● ● ● ● ● ● ● ● ● ● ● ● 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