flask full stack - desenvolvendo um cms com flask e mongodb

19
Desenvolvendo um CMS com Flask e MongoDB Full Stack

Upload: bruno-rocha

Post on 14-May-2015

927 views

Category:

Technology


4 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Desenvolvendo um CMS com Flask e MongoDB

Full Stack

Page 2: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Bruno Rocha@rochacbrunohttp://github.com/rochacbrunohttp://rochacbruno.com.brhttp://pythonhub.com

CADEMY

Who?

Page 3: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

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

What?

Page 4: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

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

For

Page 5: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

You ?

Movuca Social CMS

1999

2003

2007

2010

2013

2014

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

www.virgula.com.br, www.jovempan.com.br

demo.quokkaproject.org, www.quokkaproject.org

Page 6: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Why not Plone ?

Page 7: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Produto ou Plataforma?● Pronto para usar● Pré definições● Configuração mínima● Instalação automatizada● Boilerplate● settings via adminWordpress, Joomla, Plone, Django CMS, Mezzanine, Quokka...

● Desacoplado● Integrável● Montável● settings via código

SharePoint, Liferay, Pinax, Opps

Page 8: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

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!!!

Page 9: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

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...

Page 10: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

CMS(Produto)+ Zope Framework+ Zodb = NoSQL

Full StackFramework 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 = controleTrabalha bem com NoSQL

Crescimento gradativo

Page 11: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

WHY

?

● Leve● Flexivel (Schema less) = No migrations! :)● JSON (Python {}, JavaScript {})

Page 12: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

It is not a framework, it is a pattern!

Good intentions

your_app.py

flask.ext.*

Page 13: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

from flask import Flaskfrom flask.ext.security import Securityfrom flask.ext.admin import Adminfrom somewhere.db.models import UserDatastorefrom 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

Page 14: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

BlueprintsUm 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_templateblog_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”)

Page 15: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

● flask.ext.○ Security○ Social-login○ Rest○ Mail○ Admin○ Gravatar○ Cache○ SQLAlchemy○ MongoEngine○ RiakAlchemy○ Assets○ Script○ Celery○ Mobile○ Testing○ Babel○ WTForms○ ...

Page 16: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Se e

u fo

sse

você

eu

usar

ia…

.

● 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”)

Page 17: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Dispatcher Middleware

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(),

...

}

)

wsgi.py

Page 18: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

● 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

Page 19: Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

Thank you!www.quokkaproject.org