4. 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!!!
5. 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...
6. 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
8. It is not a framework, it is a pattern!
Good intentions
your_app.py
flask.ext.*
9. from flask import Flask
from flask.ext.security import Security
from flask.ext.admin import Admin
from somewhere.db.models import UserDatastore
from 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
10. 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 somewhere import blog_extension
def create_app(**config):
app = Flask(“myapp”)
...
app.register_blueprint(blog_extension)
return app
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”)
12. Seeufossevocêeuusaria….
● 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”)
13. ● 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