Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Flask Full Stack - Desenvolvendo um CMS com Fla...

Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

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.

Avatar for Bruno Rocha

Bruno Rocha

October 31, 2013
Tweet

More Decks by Bruno Rocha

Other Decks in Programming

Transcript

  1. 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?
  2. • Blog • Wiki • Forum • Documentação • Portal

    • Site institucional • Rede social • Intranet • GED/ECM • … For
  3. 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
  4. 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
  5. 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!!!
  6. 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...
  7. 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. WHY ? • Leve • Flexivel (Schema less) = No

    migrations! :) • JSON (Python {}, JavaScript {})
  9. It is not a framework, it is a pattern! Good

    intentions your_app.py flask.ext.*
  10. 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
  11. 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. • flask.ext. ◦ Security ◦ Social-login ◦ Rest ◦ Mail

    ◦ Admin ◦ Gravatar ◦ Cache ◦ SQLAlchemy ◦ MongoEngine ◦ RiakAlchemy ◦ Assets ◦ Script ◦ Celery ◦ Mobile ◦ Testing ◦ Babel ◦ WTForms ◦ ...
  13. Se eu fosse você eu usaria…. • 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”)
  14. 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
  15. • 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