SlideShare a Scribd company logo
REPOZE.BFG
Rok Garbas, python/zope/plone consultingOct. 2009
“Everything should be made as simple as possible, but not
simpler.” ~ Einstein
BFG is a "pay only for what you eat" Python web framework. You can get started
easily and learn new concepts as you go, and only if you need them. It's simple, well
tested, well documented, and fast.
http://bfg.repoze.org
WHAT MATTERS
I’M A PLONISTA, I LOVE PLONE, I LOVE PLONE
COMMUNITY, BUT…
ON THE END IT DOESN’T REALLY MATTER
WHAT YOU ARE USING
WHAT MATTER IS HOW PASIONATE YOU ARE
ABOUT IT
THANK YOU …
Chris McDonough
Tres Seaver
Paul Everitt,
Carlos de la Guardia
Malthe Borch
Stefan Eletzhofer
Fernando Neto-Correa
WHY NAME IT BFG
 repoze.bfg should have just been named "BFG".
 BFG's goals are somewhat sideways of the original
Repoze goals.
 The BFG 9000 is a fictional futuristic weapon found
in Doom. It is the most
powerful weapon in the
game, and is capable of
destroying nearly any
player or enemy with a
single hit.
ABOUT
 July 2008 – Initial release
 July 2009 – 1.0 released, API promissed to be
backwards compatible
 10th of October 2009 – Latest release … 1.1a5
 Allow Zope developers to use WSGI technologies
more easily and even out of Zope framework.
 Allow non-Zope developers to use Zope
technologies without using all of Zope.
WHY
ZOPE2 / PLONE
ZOPE 3
GROK
DJANGO
PYLONS / TG2
WHAT IT DOES
 Graph traversal / URL Dispatch: maps
URLs to code
 Security: provides mechanisms that allow
developers to make declarative security
assertions
 Templating: provides text and HTML
templating facilities
 Zope libs: use wonderful zope stuff
WHAT IT DOESN’T DO
 Database / persistence
 Sessions
 Indexing / searching
 ZMI / TTW code
 View code sharing with Z3 / Five
 ...
HOW YOUR BFG APP WORKS
You are not running framework and your application
inside it, like zope, instead you are running your
application alone.
INTERNET
WSGI + MIDDLEWARE
BFG ROUTER
YOUR APPLICATION
MODELS VIEWS TEMPLATES
ZOPE COMPONENT ARHITECTURE
 The Zope Component Architecture is a system for
runtime indirection ("pluggability"). Used only to
construct BFG.
 BFG application developers don't need to
understand the Zope CA. It's a framework
implementation detail.
Dependencies (22)
 Paste-1.7.2
 PasteScript-1.7.3
 PasteDeploy-1.3.3
 setuptools-0.6c8
 simplejson-2.0.9
 martian-0.12
 repoze.lru-0.3
 repoze.zcml
 zope.deprecation-3.4.0
 zope.component-3.7.1
 zope.interface-3.5.2
 WebOb-0.9.6.1
 chameleon.zpt-1.1.1
 chameleon.core-1.0.2
 zope.configuration-3.6.0
 zope.event-3.4.1
 zope.dottedname-3.4.6
 zope.i18n-3.7.1
 sourcecodegen-0.6.11
 zope.schema-3.5.4
 zope.i18nmessageid-3.5.0
 pytz-2009n
MODELS
 “content” objects. for Zope people, think of it as things we
store in ZODB
 ZODB not required for repoze.bfg applications: filesystem
directories, XML documents, RDF graphs, SQL databases, etc.
can be the source of model data
from zope.interface import implements
from zope.interface import Interface
class IMyModel(Interface):
pass
class MyModel(object):
implements(IMyModel)
def __init__(self, name):
self.name = name
VIEWS
 Views are functions which accept a "context" (a
model object) and a "request".
 Views must return a response. Unlike Zope.
 The view may use a template to generate the
response body, or not.
from repoze.bfg.chameleon_zpt 
import render_template_to_response
def hello_world(context, request):
render_template_to_response(
'templates/hello.pt',
context=context, myname='chris')
VIEW REGISTRATION
<configure xmlns="http://namespaces.zope.org/zope"
xmlns:bfg="http://namespaces.repoze.org/bfg"
i18n_domain="repoze.bfg">
<include package="repoze.bfg" />
<— default view for .interfaces.IMyModel —>
<bfg:view
for=".interfaces.IMyModel"
view=".views.my_view"
/>
<— named view for .interfaces.IMyModel —>
<bfg:view
for=".interfaces.IMyModel"
view=".views.other_view"
name="other"
/>
</configure>
VIEW REGISTRATION via DECORATORS
from webob import Response
from repoze.bfg.convention import bfg_view
from repoze.bfg.chameleon_zpt 
import render_template_to_response
@bfg_view(name='hello.html')
def hello_world(context, request):
render_template_to_response(
'templates/hello.pt',
context=context, myname='chris')
TEMPLATE
 Default templating engine: chalmeleon by Malthe
Borch. ZPT or Genshi syntax. ~10X - 15X faster
than zope.pagetemplate.
 Included: XSLT.
 Add-on: jinja2 (Django-style, via repoze.bfg.jinja2)
 Any other you'd like to use; bindings are simple to
create (see the jinja2 bindings).
TEMPLATE
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal">
<head>
<title tal:content="context.title">The title</title>
<meta http-equiv="content-type“
content="text/html;charset=utf-8"/>
</head>
<body>
<h2><span tal:replace="context.title_or_id()">content title
or id</span>
<span tal:condition="context.title“
tal:replace="context.title">optional template
title</span></h2>
This is Page Template <em
tal:content="request.view_name">template id</em>.
</body>
</html>
WSGI MIDDLEWARE
 Profiler (repoze.profile)
 Alternate exception handlers (paste.evalexception).
 Caching (repoze.accelerator)
 Theming (Deliverance).
 Transaction management (repoze.tm2)
 ...
FUTURE
 Vudo CMS (http://docs.vudo.me) to be
implemented using repoze.bfg, hopefully. Work
towards this: repoze.bfg.skins, repoze.bfg.layout,
repoze.bitblt, repoze.squeeze.
 BFG will stay minimal. Add-ons and
superframeworks like vudo and repoze.lemonade
will provide functionality.
Final words
TESTED
SIMPLE
MINIMAL
FAST
DOCUMENTED

More Related Content

PPTX
PPTX
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
PPTX
Node.JS error handling best practices
PDF
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
PDF
Build powerfull and smart web applications with Symfony2
PDF
Node.js exception handling
PDF
Why I Love Python V2
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Node.JS error handling best practices
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Build powerfull and smart web applications with Symfony2
Node.js exception handling
Why I Love Python V2

What's hot (12)

PDF
Building Desktop RIAs With PHP And JavaScript
PPTX
Java - A broad introduction
PDF
Frontend automation and stability
PDF
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
PDF
Enterprise PHP (php|works 2008)
PPT
Introduction To Django
ODP
Object Oriented Design Patterns for PHP
PDF
Apigility – Lightning Fast API Development - OSSCamp 2014
PPT
Django, What is it, Why is it cool?
PPTX
Whitebox testing of Spring Boot applications
PPTX
JS Frameworks Day April,26 of 2014
PDF
Js fwdays unit tesing javascript(by Anna Khabibullina)
Building Desktop RIAs With PHP And JavaScript
Java - A broad introduction
Frontend automation and stability
NanoSec Conference 2019: Code Execution Analysis in Mobile Apps - Abdullah Jo...
Enterprise PHP (php|works 2008)
Introduction To Django
Object Oriented Design Patterns for PHP
Apigility – Lightning Fast API Development - OSSCamp 2014
Django, What is it, Why is it cool?
Whitebox testing of Spring Boot applications
JS Frameworks Day April,26 of 2014
Js fwdays unit tesing javascript(by Anna Khabibullina)
Ad

Similar to Repoze Bfg - presented by Rok Garbas at the Python Barcelona Meetup October 2009 (20)

PDF
Bfg Ploneconf Oct2008
PDF
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
PPT
Zope and Plone in the DSD
PDF
2011: Year of the fish
PDF
Frequently asked questions answered frequently - but now for the last time
PDF
Recent Developments With ZopeSkel
PDF
Zope is dead - Long live Zope
PPT
Where's the source, Luke? : How to find and debug the code behind Plone
ODP
Grok in Plone
PPTX
Pragmatische Plone Projekte
PPTX
Pragmatic plone projects
PDF
Reusando componentes Zope fuera de Zope
PDF
State Of Zope Linuxtag 2008
PDF
Pragmatic plone projects
ODP
Introduction to Plone (PyCon Ireland 2010)
PDF
Martin Aspeli Extending And Customising Plone 3
PDF
The goodies of zope, pyramid, and plone (2)
PDF
Plone - A History of Python Web
PDF
TurboGears2 Pluggable Applications
PDF
The Plone is dead, long live the Plone!
Bfg Ploneconf Oct2008
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
Zope and Plone in the DSD
2011: Year of the fish
Frequently asked questions answered frequently - but now for the last time
Recent Developments With ZopeSkel
Zope is dead - Long live Zope
Where's the source, Luke? : How to find and debug the code behind Plone
Grok in Plone
Pragmatische Plone Projekte
Pragmatic plone projects
Reusando componentes Zope fuera de Zope
State Of Zope Linuxtag 2008
Pragmatic plone projects
Introduction to Plone (PyCon Ireland 2010)
Martin Aspeli Extending And Customising Plone 3
The goodies of zope, pyramid, and plone (2)
Plone - A History of Python Web
TurboGears2 Pluggable Applications
The Plone is dead, long live the Plone!
Ad

More from maikroeder (7)

PDF
Google charts
PDF
Encode RNA Dashboard
PDF
Pandas
PDF
Getting started with pandas
PDF
Introduction to ggplot2
ODP
Cms - Content Management System Utilities for Django
PDF
Plone Conference 2007: Acceptance Testing In Plone Using Funittest - Maik Röder
Google charts
Encode RNA Dashboard
Pandas
Getting started with pandas
Introduction to ggplot2
Cms - Content Management System Utilities for Django
Plone Conference 2007: Acceptance Testing In Plone Using Funittest - Maik Röder

Recently uploaded (20)

PDF
Machine learning based COVID-19 study performance prediction
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Big Data Technologies - Introduction.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Machine learning based COVID-19 study performance prediction
Spectral efficient network and resource selection model in 5G networks
Big Data Technologies - Introduction.pptx
Empathic Computing: Creating Shared Understanding
Diabetes mellitus diagnosis method based random forest with bat algorithm
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Approach and Philosophy of On baking technology
Unlocking AI with Model Context Protocol (MCP)
20250228 LYD VKU AI Blended-Learning.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
The AUB Centre for AI in Media Proposal.docx
Review of recent advances in non-invasive hemoglobin estimation
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Advanced methodologies resolving dimensionality complications for autism neur...
Network Security Unit 5.pdf for BCA BBA.
Reach Out and Touch Someone: Haptics and Empathic Computing
Per capita expenditure prediction using model stacking based on satellite ima...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...

Repoze Bfg - presented by Rok Garbas at the Python Barcelona Meetup October 2009

  • 1. REPOZE.BFG Rok Garbas, python/zope/plone consultingOct. 2009 “Everything should be made as simple as possible, but not simpler.” ~ Einstein BFG is a "pay only for what you eat" Python web framework. You can get started easily and learn new concepts as you go, and only if you need them. It's simple, well tested, well documented, and fast. http://bfg.repoze.org
  • 2. WHAT MATTERS I’M A PLONISTA, I LOVE PLONE, I LOVE PLONE COMMUNITY, BUT… ON THE END IT DOESN’T REALLY MATTER WHAT YOU ARE USING WHAT MATTER IS HOW PASIONATE YOU ARE ABOUT IT
  • 3. THANK YOU … Chris McDonough Tres Seaver Paul Everitt, Carlos de la Guardia Malthe Borch Stefan Eletzhofer Fernando Neto-Correa
  • 4. WHY NAME IT BFG  repoze.bfg should have just been named "BFG".  BFG's goals are somewhat sideways of the original Repoze goals.  The BFG 9000 is a fictional futuristic weapon found in Doom. It is the most powerful weapon in the game, and is capable of destroying nearly any player or enemy with a single hit.
  • 5. ABOUT  July 2008 – Initial release  July 2009 – 1.0 released, API promissed to be backwards compatible  10th of October 2009 – Latest release … 1.1a5  Allow Zope developers to use WSGI technologies more easily and even out of Zope framework.  Allow non-Zope developers to use Zope technologies without using all of Zope.
  • 6. WHY ZOPE2 / PLONE ZOPE 3 GROK DJANGO PYLONS / TG2
  • 7. WHAT IT DOES  Graph traversal / URL Dispatch: maps URLs to code  Security: provides mechanisms that allow developers to make declarative security assertions  Templating: provides text and HTML templating facilities  Zope libs: use wonderful zope stuff
  • 8. WHAT IT DOESN’T DO  Database / persistence  Sessions  Indexing / searching  ZMI / TTW code  View code sharing with Z3 / Five  ...
  • 9. HOW YOUR BFG APP WORKS You are not running framework and your application inside it, like zope, instead you are running your application alone. INTERNET WSGI + MIDDLEWARE BFG ROUTER YOUR APPLICATION MODELS VIEWS TEMPLATES
  • 10. ZOPE COMPONENT ARHITECTURE  The Zope Component Architecture is a system for runtime indirection ("pluggability"). Used only to construct BFG.  BFG application developers don't need to understand the Zope CA. It's a framework implementation detail.
  • 11. Dependencies (22)  Paste-1.7.2  PasteScript-1.7.3  PasteDeploy-1.3.3  setuptools-0.6c8  simplejson-2.0.9  martian-0.12  repoze.lru-0.3  repoze.zcml  zope.deprecation-3.4.0  zope.component-3.7.1  zope.interface-3.5.2  WebOb-0.9.6.1  chameleon.zpt-1.1.1  chameleon.core-1.0.2  zope.configuration-3.6.0  zope.event-3.4.1  zope.dottedname-3.4.6  zope.i18n-3.7.1  sourcecodegen-0.6.11  zope.schema-3.5.4  zope.i18nmessageid-3.5.0  pytz-2009n
  • 12. MODELS  “content” objects. for Zope people, think of it as things we store in ZODB  ZODB not required for repoze.bfg applications: filesystem directories, XML documents, RDF graphs, SQL databases, etc. can be the source of model data from zope.interface import implements from zope.interface import Interface class IMyModel(Interface): pass class MyModel(object): implements(IMyModel) def __init__(self, name): self.name = name
  • 13. VIEWS  Views are functions which accept a "context" (a model object) and a "request".  Views must return a response. Unlike Zope.  The view may use a template to generate the response body, or not. from repoze.bfg.chameleon_zpt import render_template_to_response def hello_world(context, request): render_template_to_response( 'templates/hello.pt', context=context, myname='chris')
  • 14. VIEW REGISTRATION <configure xmlns="http://namespaces.zope.org/zope" xmlns:bfg="http://namespaces.repoze.org/bfg" i18n_domain="repoze.bfg"> <include package="repoze.bfg" /> <— default view for .interfaces.IMyModel —> <bfg:view for=".interfaces.IMyModel" view=".views.my_view" /> <— named view for .interfaces.IMyModel —> <bfg:view for=".interfaces.IMyModel" view=".views.other_view" name="other" /> </configure>
  • 15. VIEW REGISTRATION via DECORATORS from webob import Response from repoze.bfg.convention import bfg_view from repoze.bfg.chameleon_zpt import render_template_to_response @bfg_view(name='hello.html') def hello_world(context, request): render_template_to_response( 'templates/hello.pt', context=context, myname='chris')
  • 16. TEMPLATE  Default templating engine: chalmeleon by Malthe Borch. ZPT or Genshi syntax. ~10X - 15X faster than zope.pagetemplate.  Included: XSLT.  Add-on: jinja2 (Django-style, via repoze.bfg.jinja2)  Any other you'd like to use; bindings are simple to create (see the jinja2 bindings).
  • 17. TEMPLATE <html xmlns="http://www.w3.org/1999/xhtml" xmlns:tal="http://xml.zope.org/namespaces/tal"> <head> <title tal:content="context.title">The title</title> <meta http-equiv="content-type“ content="text/html;charset=utf-8"/> </head> <body> <h2><span tal:replace="context.title_or_id()">content title or id</span> <span tal:condition="context.title“ tal:replace="context.title">optional template title</span></h2> This is Page Template <em tal:content="request.view_name">template id</em>. </body> </html>
  • 18. WSGI MIDDLEWARE  Profiler (repoze.profile)  Alternate exception handlers (paste.evalexception).  Caching (repoze.accelerator)  Theming (Deliverance).  Transaction management (repoze.tm2)  ...
  • 19. FUTURE  Vudo CMS (http://docs.vudo.me) to be implemented using repoze.bfg, hopefully. Work towards this: repoze.bfg.skins, repoze.bfg.layout, repoze.bitblt, repoze.squeeze.  BFG will stay minimal. Add-ons and superframeworks like vudo and repoze.lemonade will provide functionality.