quokka cms - content management with flask and mongo #tdc2014
DESCRIPTION
QUOKKA CMS, Flask and MongoDB powered content management system.TRANSCRIPT
Bruno Rocha@rochacbruno (everywhere)github.com/rochacbrunobrunorocha.orgpythonhub.com
Who?
Why not Plone ?
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!!!
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 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
WHY
?
● Leve● Flexivel (Schema less) = No migrations! :)● JSON (Python {}, JavaScript {})● Aggregation Framework / Pipelines
It is not a framework, it is a pattern!
Good intentions
your_app.py
flask.ext.*
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
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”)
● flask.ext.○ Security○ Social-login○ Rest○ Mail○ Admin○ Gravatar○ Cache○ SQLAlchemy○ MongoEngine○ RiakAlchemy○ Assets○ Script○ Celery○ Mobile○ Testing○ Babel○ WTForms○ ...
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”)
● 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
CONTENT ADMIN
CONTENT EDITORS (markdown / html)
MEDIA MANAGEMENT
MODULES
Next step: Quokka as a Framework on top of Flask
$ quokka start_project
$ quokka start_module
$ quokka start_theme
$ quokka register theme$ quokka install theme
$ quokka register module$ quokka install module
$ quokka deploy --heroku --user….
Thank you!www.quokkaproject.org