REPOZE.BFG
Rok Garbas, python/zope/plone consultingOct. 2009
“Everything should be made as simple as possible, but not
sim...
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 U...
THANK YOU …
Chris McDonough
Tres Seaver
Paul Everitt,
Carlos de la Guardia
Malthe Borch
Stefan Eletzhofer
Fernando Neto-Co...
WHY NAME IT BFG
 repoze.bfg should have just been named "BFG".
 BFG's goals are somewhat sideways of the original
Repoze...
ABOUT
 July 2008 – Initial release
 July 2009 – 1.0 released, API promissed to be
backwards compatible
 10th of October...
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 ...
WHAT IT DOESN’T DO
 Database / persistence
 Sessions
 Indexing / searching
 ZMI / TTW code
 View code sharing with Z3...
HOW YOUR BFG APP WORKS
You are not running framework and your application
inside it, like zope, instead you are running yo...
ZOPE COMPONENT ARHITECTURE
 The Zope Component Architecture is a system for
runtime indirection ("pluggability"). Used on...
Dependencies (22)
 Paste-1.7.2
 PasteScript-1.7.3
 PasteDeploy-1.3.3
 setuptools-0.6c8
 simplejson-2.0.9
 martian-0....
MODELS
 “content” objects. for Zope people, think of it as things we
store in ZODB
 ZODB not required for repoze.bfg app...
VIEWS
 Views are functions which accept a "context" (a
model object) and a "request".
 Views must return a response. Unl...
VIEW REGISTRATION
<configure xmlns="http://namespaces.zope.org/zope"
xmlns:bfg="http://namespaces.repoze.org/bfg"
i18n_dom...
VIEW REGISTRATION via DECORATORS
from webob import Response
from repoze.bfg.convention import bfg_view
from repoze.bfg.cha...
TEMPLATE
 Default templating engine: chalmeleon by Malthe
Borch. ZPT or Genshi syntax. ~10X - 15X faster
than zope.pagete...
TEMPLATE
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal">
<head>
<title tal:cont...
WSGI MIDDLEWARE
 Profiler (repoze.profile)
 Alternate exception handlers (paste.evalexception).
 Caching (repoze.accele...
FUTURE
 Vudo CMS (http://docs.vudo.me) to be
implemented using repoze.bfg, hopefully. Work
towards this: repoze.bfg.skins...
Final words
TESTED
SIMPLE
MINIMAL
FAST
DOCUMENTED
Upcoming SlideShare
Loading in …5
×

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

2,899 views
2,777 views

Published on

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.

This is a talk given by Rok Garbas at the Python Barcelona Meetup in October 2009

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,899
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 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. 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. 3. THANK YOU … Chris McDonough Tres Seaver Paul Everitt, Carlos de la Guardia Malthe Borch Stefan Eletzhofer Fernando Neto-Correa
  4. 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. 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. 6. WHY ZOPE2 / PLONE ZOPE 3 GROK DJANGO PYLONS / TG2
  7. 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. 8. WHAT IT DOESN’T DO  Database / persistence  Sessions  Indexing / searching  ZMI / TTW code  View code sharing with Z3 / Five  ...
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 18. WSGI MIDDLEWARE  Profiler (repoze.profile)  Alternate exception handlers (paste.evalexception).  Caching (repoze.accelerator)  Theming (Deliverance).  Transaction management (repoze.tm2)  ...
  19. 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.
  20. 20. Final words TESTED SIMPLE MINIMAL FAST DOCUMENTED

×