Flask Full Stack - Desenvolvendo um CMS com Flask e MongoDB

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.

9200c133c210ad51e8005277e932061a?s=128

Bruno Rocha

October 31, 2013
Tweet

Transcript

  1. Desenvolvendo um CMS com Flask e MongoDB Full Stack

  2. Bruno Rocha @rochacbruno http://github.com/rochacbruno http://rochacbruno.com.br http://pythonhub.com CADEMY Who?

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

    • Site institucional • Rede social • Intranet • GED/ECM • … For
  5. 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
  6. Why not Plone ?

  7. 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
  8. 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!!!
  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
  11. WHY ? • Leve • Flexivel (Schema less) = No

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

    intentions your_app.py flask.ext.*
  13. 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
  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 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”)
  15. • flask.ext. ◦ Security ◦ Social-login ◦ Rest ◦ Mail

    ◦ Admin ◦ Gravatar ◦ Cache ◦ SQLAlchemy ◦ MongoEngine ◦ RiakAlchemy ◦ Assets ◦ Script ◦ Celery ◦ Mobile ◦ Testing ◦ Babel ◦ WTForms ◦ ...
  16. 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”)
  17. 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
  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
  19. Thank you! www.quokkaproject.org