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