Flask for CMS/App Framework development.

1,129 views
937 views

Published on

Palestra na Python MG (Universidade Federal de Lavras) em 25/01/2014

Published in: Technology

Flask for CMS/App Framework development.

  1. 1. Full Stack Desenvolvendo um CMS com Flask e MongoDB Application Framework
  2. 2. Who? Bruno Rocha @rochacbruno http://github.com/rochacbruno http://rochacbruno.com.br http://pythonhub.com
  3. 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
  4. 4. For ● ● ● ● ● ● ● ● ● ● Blog Wiki Forum Documentação Portal Site institucional Rede social Intranet GED/ECM …
  5. 5. You ? 1999 2003 2007 2010 2013 2014 Movuca Social CMS www.web2pyslices.com , www.menuvegano.com.br www.virgula.com.br, www.jovempan.com.br demo.quokkaproject.org, www.quokkaproject.org
  6. 6. Why not Plone ?
  7. 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. 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. 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. 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. 11. WHY ? ● ● ● ● Leve Flexivel (Schema less) = No migrations! :) JSON (Python {}, JavaScript {}) Aggregation Framework / Pipelines
  12. 12. It is not a framework, it is a pattern! Good intentions flask.ext.* your_app.py
  13. 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. 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
  15. 15. ● flask.ext. ○ Security ○ Social-login ○ Rest ○ Mail ○ Admin ○ Gravatar ○ Cache ○ SQLAlchemy ○ MongoEngine ○ RiakAlchemy ○ Assets ○ Script ○ Celery ○ Mobile ○ Testing ○ Babel ○ WTForms ○ ...
  16. 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. 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. 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. 19. CONTENT ADMIN
  20. 20. CONTENT EDITORS (markdown / html)
  21. 21. MEDIA MANAGEMENT
  22. 22. MODULES
  23. 23. 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….
  24. 24. Thank you! www.quokkaproject.org

×